腾讯云可观测平台 通过 OpenTelemetry-JS 方案接入 Node.js 应用(推荐)

这篇将通过相关操作介绍如何通过 OpenTelemetry-JS 方案接入 Node.js 应用。OpenTelemetry-JS 方案对于 Node.js 系的常用模块和框架,包括 Express、MySQL、gRPC 等,提供了自动埋点,在不需要修改代码的情况下就能实现链路信息的上报。其他支持自动埋点的模块和框架请参考 OpenTelemetry 社区提供的 完整列表。

相关产品
腾讯云可观测平台 产品页,含版本规格、价格与购买入口。

注意:说明:

注意:OpenTelemetry 是工具、API 和 SDK 的集合,用来检测、生成、收集和导出遥测数据(指标、日志和跟踪),帮助用户分析软件的性能和行为。关于 OpenTelemetry 的更多信息请参考 OpenTelemetry 网站。

一、示例 Demo

示例代码 main.js 通过 Express 提供3个 HTTP 接口,对应的 MySQL 和 Redis 服务请自行搭建,或直接购买云产品。

"use strict";const axios = require("axios").default;const express = require("express");const redis = require('./utils/redis');const dbHelper = require("./utils/db"); const app = express();app.get("/remoteInvoke", async (req, res) => { const result = await axios.get("http://cloud.tencent.com"); return res.status(200).send(result.data);});app.get("/redis", async(req, res) => { let queryRes = await redis.getKey("foo"); res.json({ code: 200, result: queryRes});})app.get("/mysql", async(req, res) => { let select = `select * from table_demo`; await dbHelper.query(select); res.json({ code: 200, result: "mysql op ended"});})app.use(express.json());app.listen(8080, () => { console.log("Listening on http://localhost:8080");});

二、获取接入点和 Token

1. 登录 腾讯云可观测平台 控制台。

2. 在左侧菜单栏中选择应用性能监控 > 应用列表,单击接入应用。

3. 在右侧弹出的接入应用抽屉框中,单击 Node 语言。

4. 在接入 Node 应用页面,选择你所要接入的地域以及业务系统。

5. 选择接入协议类型为 OpenTelemetry。

6. 选择你所想要的上报方式,获取你的接入点和 Token。

注意:说明:

三、步骤1:确定探针版本

请参考 探针版本选择,找到和 Node.js 版本所匹配的探针版本。

四、步骤2:安装所需的依赖包

·如果使用最新版本的探针,请运行如下命令安装依赖:

npm install –save @opentelemetry/apinpm install –save @opentelemetry/auto-instrumentations-node

·如果使用非最新版本的探针,请运行如下命令安装依赖(以 0.56.0 为例):

npm install –save @opentelemetry/apinpm install –save @opentelemetry/auto-instrumentations-node@0.56.0

五、步骤3:添加运行参数

通过如下命令启动 Node.js 应用。

export OTEL_TRACES_EXPORTER="otlp" export OTEL_RESOURCE_ATTRIBUTES='token=<token>,host.name=<hostName>' export OTEL_EXPORTER_OTLP_PROTOCOL='grpc' export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="<endpoint>" export OTEL_SERVICE_NAME="<serviceName>" export NODE_OPTIONS="–require @opentelemetry/auto-instrumentations-node/register" node main.js

对应的字段说明如下:

·<serviceName> :应用名,多个使用相同 serviceName 接入的应用进程,在 APM 中会表现为相同应用下的多个实例。应用名最长63个字符,只能包含小写字母、数字及分隔符“ – ”,且必须以小写字母开头,数字或小写字母结尾。

·<token> :前置步骤中拿到业务系统 Token。

·<hostName>:该实例的主机名,是应用实例的唯一标识,通常情况下可以设置为应用实例的 IP 地址。对于 K8s 环境,可以通过 Downward API 动态获取 Pod IP,具体配置方式请参见 动态获取 Pod 名称和 Pod IP。

·<endpoint> :前置步骤中拿到的接入点。

注意:说明:

注意:上述列出的字段均为必填(Required)。

下述内容以应用名为 myService,业务系统 Token 为 myToken,主机名为 192.168.0.10,接入点以 http://pl-demo.ap-guangzhou.apm.tencentcs.com:4319 为例,完整的启动命令如下。

export OTEL_TRACES_EXPORTER="otlp" export OTEL_RESOURCE_ATTRIBUTES='token=myToken,hostName=192.168.0.10' export OTEL_EXPORTER_OTLP_PROTOCOL='grpc' export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="http://pl-demo.ap-guangzhou.apm.tencentcs.com:4319" export OTEL_SERVICE_NAME="myService" export NODE_OPTIONS="–require @opentelemetry/auto-instrumentations-node/register" node main.js

六、接入验证

启动 Node.js 应用后,通过8080端口访问对应的接口,例如 https://localhost:8080/。在有正常流量的情况下,应用性能监控 > 应用列表 中将展示接入的应用,单击应用名称/ID 进入应用详情页。

再选择实例分析,即可看到接入的应用实例。由于可观测数据的处理存在一定延时,如果接入后在控制台没有查询到应用或实例,请等待30秒左右。

七、自定义埋点(可选)

当自动埋点不满足你的场景或者需要增加业务层埋点时,你可参照下述内容,使用 OpenTelemetry API 添加自定义埋点。这篇仅展示最基本的自定义埋点方式,OpenTelemetry 社区提供了更多灵活的自定义埋点方式,具体使用方法可参考 OpenTelemetry 社区提供的 JavaScript 自定义埋点文档。

const opentelemetry = require("@opentelemetry/api");app.get("/attr", async(req, res) => { const tracer = opentelemetry.trace.getTracer( 'my-service-tracer' ); tracer.startActiveSpan('new internal span', span => { span.addEvent("Acquiring lock", { 'log.severity':'error', 'log.message':'data node found', }) span.addEvent("Got lock, doing work…", { 'log.severity':'11111', 'log.message':'2222222', 'log.message1':'3333333', }) span.addEvent("Unlocking") span.end(); }); res.json({ code: 200, msg: "success" });})

赞 (0)
上一篇 4天前
下一篇 4天前