OpenTelemetry
- OpenTelemetry 是什么?
- 定义 spec
- OpenTracing 和 OpenCensus 合并后的项目
- API -> SDK -> Processing -> Exporter -out of app-> Collector -> Backend
- 参考
- otlp
- /v1/traces
- /v1/metrics
- /v1/logs
docker run --rm -it \
--name opentelemetry-collector otel/opentelemetry-collector
collector
- open-telemetry/opentelemetry-collector
- vendor-agnostic implementation
- 实现多套协议
- 运行模式
- agent - sidecar,采集器
- gateway - 网关集群,独立服务
- core 版 - Jaeger, Prometheus, Fluent Bit
- contrib 版 - 包含所有 contrib 组件
- open-telemetry/opentelemetry-collector-contrib/exporter 不同后端的 exporter
- 组件
- receivers
- processors
- exporters
# 数据源定义 - 在 pipeline/service 中使用
# push or pull
receivers:
otlp:
protocols:
grpc:
http:
processors:
batch:
exporters:
otlp:
endpoint: otelcol:55680
extensions:
health_check:
pprof:
zpages:
service:
extensions: [health_check, pprof, zpages]
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlp]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [otlp]
logs:
receivers: [otlp]
processors: [batch]
exporters: [otlp]
Integration
env | for |
---|---|
OTEL_EXPORTER_OTLP_ENDPOINT | |
OTEL_LOG_LEVEL |
NodeJS
- 参考
npm add @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node
# @opentelemetry/sdk-trace-web
# @opentelemetry/sdk-metrics
npm add @opentelemetry/sdk-trace-node @opentelemetry/exporter-trace-otlp-proto
tracing.ts
'use strict';
import process from 'node:process';
import opentelemetry from '@opentelemetry/sdk-node';
import { NodeSDK } from '@opentelemetry/sdk-node';
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
import { ConsoleSpanExporter } from '@opentelemetry/sdk-trace-base';
import { Resource } from '@opentelemetry/resources';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
import { PeriodicExportingMetricReader, ConsoleMetricExporter } from '@opentelemetry/sdk-metrics';
const sdk = new NodeSDK({
traceExporter: new ConsoleSpanExporter(),
metricReader: new PeriodicExportingMetricReader({
exporter: new ConsoleMetricExporter(),
}),
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: 'my-service',
}),
instrumentations: [getNodeAutoInstrumentations()],
});
// initialize the SDK and register with the OpenTelemetry API
// this enables the API to record telemetry
sdk.start();
// gracefully shut down the SDK on process exit
process.on('SIGTERM', () => {
sdk
.shutdown()
.then(() => console.log('Tracing terminated'))
.catch((error) => console.log('Error terminating tracing', error))
.finally(() => process.exit(0));
});