tencent cloud

腾讯云可观测平台

动态与公告
产品动态
产品简介
产品概述
产品优势
基本功能
基本概念
应用场景
使用限制
购买指南
云产品监控
应用性能监控
终端性能监控
前端性能监控
云拨测
Prometheus 监控服务
Grafana 服务
事件总线
云压测
快速入门
监控概览
实例分组
云产品监控
应用性能监控
云拨测
云压测
Prometheus 监控服务
Grafana 服务
创建 Dashboard
事件总线
告警服务
云产品监控
云产品监控指标
控制台操作指南
云服务器监控组件
云产品监控对接 Grafana
故障处理
实践教程
应用性能监控
应用性能监控简介
接入指南
控制台操作指南
实践教程
参考信息
常见问题
终端性能监控
终端性能监控概述
控制台操作指南
接入指南
实践教程
前端性能监控
前端性能监控简介
控制台操作指南
接入指南
常见问题
云拨测
产品简介
控制台操作指南
常见问题
云压测
云压测概述
控制台操作指南
实践教程
JavaScript API 列表
常见问题
Prometheus 监控
Prometheus 监控简介
接入指南
控制台操作指南
实践教程
Terraform
常见问题
Grafana 服务
产品简介
控制台操作指南
Grafana 平台常用功能指引
常见问题
Dashboard
什么是 Dashboard
控制台操作指南
告警管理
控制台操作指南
故障处理
常见问题
事件总线
事件总线简介
控制台操作指南
实践教程
常见问题
报表管理
常见问题
腾讯云可观测平台常见问题
告警服务相关
一般性问题
监控图表相关
云服务器监控组件相关
动态阈值告警相关
云监控对接 Grafana 相关
文档阅读指南
相关协议
应用性能监控服务等级协议
APM 隐私协议
APM 数据处理和安全协议
前端性能监控服务等级协议
终端性能监控服务等级协议
云拨测服务等级协议
Prometheus 监控服务服务等级协议
Grafana 服务服务等级协议
云压测服务等级协议
云压测使用限制
Cloud Monitor Service Level Agreement
词汇表
文档腾讯云可观测平台应用性能监控接入指南接入 Node.js 应用通过 OpenTelemetry-JS 方案接入 Node.js 应用(推荐)

通过 OpenTelemetry-JS 方案接入 Node.js 应用(推荐)

PDF
聚焦模式
字号
最后更新时间: 2025-10-13 19:10:49
说明:
OpenTelemetry 是工具、API 和 SDK 的集合,用来检测、生成、收集和导出遥测数据(指标、日志和跟踪),帮助用户分析软件的性能和行为。关于 OpenTelemetry 的更多信息请参考 OpenTelemetry 官方网站
OpenTelemetry 社区活跃,技术更迭迅速,广泛兼容主流编程语言、组件与框架,为云原生微服务以及容器架构的链路追踪能力广受欢迎。
本文将通过相关操作介绍如何通过 OpenTelemetry-JS 方案接入 Node.js 应用。
OpenTelemetry-JS 方案对于 Node.js 系的常用模块和框架,包括 Express、mysql、gRPC 等,提供了自动埋点,在不需要修改代码的情况下就能实现链路信息的上报。其他支持自动埋点的模块和框架请参考 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
说明:
内网上报:使用此上报方式,您的服务需运行在腾讯云 VPC。通过 VPC 直接联通,在避免外网通信的安全风险同时,可以节省上报流量开销。
外网上报:当您的服务部署在本地或非腾讯云 VPC 内,可以通过此方式上报数据。请注意外网通信存在安全风险,同时也会造成一定上报流量费用。

接入 Node.js 应用

步骤1:安装所需的依赖包

npm install --save @opentelemetry/api
npm install --save @opentelemetry/auto-instrumentations-node

步骤2:添加运行参数

通过如下命令启动 Node.js 应用:
export OTEL_TRACES_EXPORTER="otlp"
export OTEL_RESOURCE_ATTRIBUTES='token=<token>,hostName=<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 地址。
<endpoint> :前置步骤中拿到的接入点。
下述内容以应用名为 myService,业务系统 Token 为 myToken,主机名为 192.168.0.10,接入点以 http://pl-demo.ap-guangzhou.apm.tencentcs.com:4317 为例,完整的启动命令为:
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:4317"
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" });
})


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈