- 添加 go.opentelemetry.io/otel 及相关子包 - 更新 golang.org/x/net、golang.org/x/sync 等依赖版本 - 移除部分旧版本的依赖包
94 lines
2.8 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|