如何为OpenTelemetry NodeJS自动链路追踪设置服务名称?
解决OpenTelemetry服务名称配置问题
方法1:直接在NodeSDK配置中指定服务名
修改tracing.js代码,在NodeSDK的构造参数里添加serviceName字段即可:
const opentelemetry = require("@opentelemetry/sdk-node"); const { getNodeAutoInstrumentations } = require("@opentelemetry/auto-instrumentations-node"); const { OTLPTraceExporter } = require("@opentelemetry/exporter-trace-otlp-http"); const { diag, DiagConsoleLogger, DiagLogLevel } = require('@opentelemetry/api'); diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.INFO); const sdk = new opentelemetry.NodeSDK({ serviceName: "你的自定义服务名称", // 此处替换为你的服务名称 traceExporter: new OTLPTraceExporter({ url: process.env.OPENTELEMETRY_URL, headers: {}, }), instrumentations: [getNodeAutoInstrumentations()], }); sdk.start();
方法2:通过环境变量设置
若不想硬编码服务名,可在启动应用时设置OTEL_SERVICE_NAME环境变量:
OTEL_SERVICE_NAME="你的自定义服务名称" node app.js
方法3:通过Resource组件显式配置(支持更多元数据)
如果需要添加服务版本、运行环境等额外元数据,可使用Resource类定义:
const opentelemetry = require("@opentelemetry/sdk-node"); const { getNodeAutoInstrumentations } = require("@opentelemetry/auto-instrumentations-node"); const { OTLPTraceExporter } = require("@opentelemetry/exporter-trace-otlp-http"); const { diag, DiagConsoleLogger, DiagLogLevel } = require('@opentelemetry/api'); const { Resource } = require('@opentelemetry/resources'); const { SEMRESATTRS_SERVICE_NAME } = require('@opentelemetry/semantic-conventions'); diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.INFO); const resource = new Resource({ [SEMRESATTRS_SERVICE_NAME]: "你的自定义服务名称", // 可添加更多元数据,比如服务版本 // "service.version": "1.0.0" }); const sdk = new opentelemetry.NodeSDK({ resource: resource, traceExporter: new OTLPTraceExporter({ url: process.env.OPENTELEMETRY_URL, headers: {}, }), instrumentations: [getNodeAutoInstrumentations()], }); sdk.start();
以上三种方法均可替换Datadog中默认的unknown_service标识,优先推荐方法1或2,配置更简洁;需扩展元数据时选用方法3。
内容的提问来源于stack exchange,提问作者AnyamBorogass
相关产品推荐
相关产品推荐

