-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinit.go
More file actions
61 lines (52 loc) · 1.63 KB
/
init.go
File metadata and controls
61 lines (52 loc) · 1.63 KB
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
61
package dgotel
import (
"context"
"log"
"time"
dgsys "github.com/darwinOrg/go-common/sys"
"go.opentelemetry.io/otel"
"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"
"go.opentelemetry.io/otel/trace"
)
var (
Tracer trace.Tracer
tracerServiceName string
)
func InitTracer(ctx context.Context, serviceName string, exporter sdktrace.SpanExporter) func() {
batchSpanProcessor := sdktrace.NewBatchSpanProcessor(exporter)
otelResource := NewResource(ctx, serviceName)
traceProvider := sdktrace.NewTracerProvider(
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithResource(otelResource),
sdktrace.WithSpanProcessor(batchSpanProcessor))
otel.SetTracerProvider(traceProvider)
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))
Tracer = otel.Tracer(serviceName)
tracerServiceName = serviceName
return func() {
cxt, cancel := context.WithTimeout(ctx, time.Second)
defer cancel()
if err := traceProvider.Shutdown(cxt); err != nil {
log.Printf("traceProvider shutdown error: %v", err)
otel.Handle(err)
}
}
}
func NewResource(ctx context.Context, serviceName string) *resource.Resource {
r, err := resource.New(ctx,
resource.WithAttributes(
semconv.ServiceNameKey.String(serviceName),
semconv.HostNameKey.String(dgsys.GetHostName()),
),
)
if err != nil {
log.Fatalf("%s: %v", "Failed to create OpenTelemetry resource", err)
}
return r
}
func GetTracerServiceName() string {
return tracerServiceName
}