opentelemetry 入门

opentelemetry 入门 概念 ​ OpenTelemetry 是一个可观测性框架和工具包, 旨在创建和管理遥测数据,如链路、 指标和日志。 重要的是,OpenTelemetry 是供应商和工具无关的,这意味着它可以与各种可观测性后端一起使用, 包括 Jaeger 和 Prometheus 这类开源工具以及商业化产品。 ​ OpenTelemetry 不是像 Jaeger、Prometheus 或其他商业供应商那样的可观测性后端。 OpenTelemetry 专注于遥测数据的生成、采集、管理和导出。 ​ OpenTelemetry 的一个主要目标是, 无论应用程序或系统采用何种编程语言、基础设施或运行时环境,你都可以轻松地将其仪表化。 重要的是,遥测数据的存储和可视化是有意留给其他工具处理的。 Traces ​ 获取或初始化一个追踪器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 package main import ( "context" "log" "go.opentelemetry.io/otel/exporters/stdout/stdouttrace" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" semconv "go.opentelemetry.io/otel/semconv/v1.19.0" "go.opentelemetry.io/otel/trace" ) var tracer trace.Tracer func newExporter(ctx context.Context) (sdktrace.SpanExporter, error) { // Your preferred exporter: console, jaeger, zipkin, OTLP, etc. return stdouttrace.New(stdouttrace.WithPrettyPrint()) } func newTraceProvider(exp sdktrace.SpanExporter) *sdktrace.TracerProvider { // Ensure default SDK resources and the required service name are set. r, err := resource.Merge( resource.Default(), resource.NewWithAttributes( semconv.SchemaURL, semconv.ServiceName("ExampleService"), ), ) if err != nil { panic(err) } return sdktrace.NewTracerProvider( sdktrace.WithBatcher(exp), sdktrace.WithResource(r), ) } func main() { ctx := context.Background() exp, err := newExporter(ctx) if err != nil { log.Fatalf("failed to initialize exporter: %v", err) } // Create a new tracer provider with a batch span processor and the given exporter. tp := newTraceProvider(exp) // Handle shutdown properly so nothing leaks. defer func() { _ = tp.Shutdown(ctx) }() otel.SetTracerProvider(tp) // Finally, set the tracer that can be used for this package. tracer = tp.Tracer("example.io/package/name") } ...

2024-11-15 · 7 min · 3117 words · Luenci