-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathotel.go
102 lines (84 loc) · 2.77 KB
/
otel.go
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package vote
import (
"context"
"log"
"time"
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"go.opentelemetry.io/otel/exporters/stdout/stdoutmetric"
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
sdkMetric "go.opentelemetry.io/otel/sdk/metric"
sdkResource "go.opentelemetry.io/otel/sdk/resource"
sdkTrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
)
func NewResource() *sdkResource.Resource {
resource, _ := sdkResource.Merge(
sdkResource.Default(),
sdkResource.NewWithAttributes(
semconv.SchemaURL,
semconv.ServiceName("voting-demo"),
semconv.ServiceVersion("0.1.0"),
))
return resource
}
func NewOLTPConn() *grpc.ClientConn {
conn, err := grpc.NewClient("localhost:4317",
grpc.WithTransportCredentials(insecure.NewCredentials()),
)
if err != nil {
log.Fatalf("Failed to create gRPC client connection: %v", err)
}
return conn
}
func NewOTLPTracerProvider(resource *sdkResource.Resource, conn *grpc.ClientConn) *sdkTrace.TracerProvider {
ctx := context.Background()
exporter, err := otlptracegrpc.New(ctx, otlptracegrpc.WithGRPCConn(conn))
if err != nil {
log.Fatalf("Failed to create metric exporter: %v", err)
}
batchSpanProcessor := sdkTrace.NewBatchSpanProcessor(exporter)
tracerProvider := sdkTrace.NewTracerProvider(
sdkTrace.WithResource(resource),
sdkTrace.WithSpanProcessor(batchSpanProcessor),
)
return tracerProvider
}
func NewOLTPMeterProvider(resource *sdkResource.Resource, conn *grpc.ClientConn) *sdkMetric.MeterProvider {
ctx := context.Background()
exporter, err := otlpmetricgrpc.New(ctx, otlpmetricgrpc.WithGRPCConn(conn))
if err != nil {
log.Fatalf("Failed to create metric exporter: %v", err)
}
meterProvider := sdkMetric.NewMeterProvider(
sdkMetric.WithResource(resource),
sdkMetric.WithReader(sdkMetric.NewPeriodicReader(exporter)),
)
return meterProvider
}
func newStdoutTracerProvider() *sdkTrace.TracerProvider {
traceExporter, err := stdouttrace.New(stdouttrace.WithPrettyPrint())
if err != nil {
log.Fatal(err)
}
tracerProvider := sdkTrace.NewTracerProvider(
sdkTrace.WithBatcher(traceExporter,
// Default is 5s. Set to 1s for demonstrative purposes.
sdkTrace.WithBatchTimeout(time.Second)),
)
return tracerProvider
}
func newStdoutMeterProvider() *sdkMetric.MeterProvider {
metricExporter, err := stdoutmetric.New()
if err != nil {
log.Fatal(err)
}
meterProvider := sdkMetric.NewMeterProvider(
sdkMetric.WithReader(sdkMetric.NewPeriodicReader(metricExporter,
// Default is 1m. Set to 3s for demonstrative purposes.
sdkMetric.WithInterval(3*time.Second))),
)
return meterProvider
}