OpenTelemetry 手动检测
介绍
OpenTelemetry是一个开源的观测框架,用于生成、收集和导出遥测数据(指标、日志和跟踪)。手动检测是指开发者主动在代码中添加跟踪逻辑,以获取更精细的应用程序行为洞察。与自动检测相比,手动检测提供了更高的灵活性和控制力。
何时选择手动检测?
- 需要跟踪特定业务逻辑
- 自动检测无法覆盖的代码路径
- 需要自定义属性或事件
核心概念
1. Tracer Provider
Tracer Provider是跟踪系统的入口点,负责创建Tracer实例:
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
const provider = new NodeTracerProvider();
provider.register();
2. Tracer
Tracer用于创建Span(跟踪的基本单元):
const { trace } = require('@opentelemetry/api');
const tracer = trace.getTracer('my-service-tracer');
3. Span
Span代表一个操作或工作单元:
// 创建顶级Span
const span = tracer.startSpan('main-operation');
try {
// 业务逻辑...
span.addEvent('operation-started');
// 创建子Span
const childSpan = tracer.startSpan('sub-operation', {
parent: span
});
// 更多业务逻辑...
childSpan.end();
} catch (error) {
span.recordException(error);
span.setStatus({ code: trace.SpanStatusCode.ERROR });
} finally {
span.end();
}