Files
bl/common/serialize/opentelemetry_util.go
昔念 d1d9be26c1 build(common): 更新 OpenTelemetry 相关依赖
- 添加 go.opentelemetry.io/otel 及相关子包
- 更新 golang.org/x/net、golang.org/x/sync 等依赖版本
- 移除部分旧版本的依赖包
2025-07-03 00:33:59 +08:00

94 lines
2.8 KiB
Go

package serialize
import (
"context"
"log"
"os"
"time"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.15.0"
)
const (
SERVICE_NAME = "blazing"
SERVICE_VERSION = "1.1.1"
DEPLOY_ENVIRONMENT = "test"
HTTP_ENDPOINT = "tracing-analysis-dc-hz.aliyuncs.com"
HTTP_URL_PATH = "adapt_gvvug3dmib@f020b8d77be60b5_gvvug3dmib@53df7ad2afe8301/api/otlp/traces"
)
// 设置应用资源
func newResource(ctx context.Context) *resource.Resource {
hostName, _ := os.Hostname()
r, err := resource.New(
ctx,
resource.WithFromEnv(),
resource.WithProcess(),
resource.WithTelemetrySDK(),
resource.WithHost(),
resource.WithAttributes(
semconv.ServiceNameKey.String(SERVICE_NAME), // 应用名
semconv.ServiceVersionKey.String(SERVICE_VERSION), // 应用版本
semconv.DeploymentEnvironmentKey.String(DEPLOY_ENVIRONMENT), // 部署环境
semconv.HostNameKey.String(hostName), // 主机名
),
)
if err != nil {
log.Fatalf("%s: %v", "Failed to create OpenTelemetry resource", err)
}
return r
}
func newHTTPExporterAndSpanProcessor(ctx context.Context) (*otlptrace.Exporter, sdktrace.SpanProcessor) {
traceExporter, err := otlptrace.New(ctx, otlptracehttp.NewClient(
otlptracehttp.WithEndpoint(HTTP_ENDPOINT),
otlptracehttp.WithURLPath(HTTP_URL_PATH),
otlptracehttp.WithInsecure(),
otlptracehttp.WithCompression(1)))
if err != nil {
log.Fatalf("%s: %v", "Failed to create the OpenTelemetry trace exporter", err)
}
batchSpanProcessor := sdktrace.NewBatchSpanProcessor(traceExporter)
return traceExporter, batchSpanProcessor
}
// InitOpenTelemetry OpenTelemetry 初始化方法
func InitOpenTelemetry() func() {
ctx := context.Background()
var traceExporter *otlptrace.Exporter
var batchSpanProcessor sdktrace.SpanProcessor
traceExporter, batchSpanProcessor = newHTTPExporterAndSpanProcessor(ctx)
otelResource := newResource(ctx)
traceProvider := sdktrace.NewTracerProvider(
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithResource(otelResource),
sdktrace.WithSpanProcessor(batchSpanProcessor))
otel.SetTracerProvider(traceProvider)
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))
return func() {
cxt, cancel := context.WithTimeout(ctx, time.Second)
defer cancel()
if err := traceExporter.Shutdown(cxt); err != nil {
otel.Handle(err)
}
}
}