generated from kyma-project/template-repository
-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathsetup.go
101 lines (89 loc) · 3.37 KB
/
setup.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
package main
import (
"context"
"fmt"
"os"
"time"
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"go.opentelemetry.io/otel/exporters/prometheus"
"go.opentelemetry.io/otel/exporters/stdout/stdoutmetric"
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
"go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/resource"
"go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
)
func newOtelResource() (*resource.Resource, error) {
// Ensure default SDK resources and the required service name are set.
res, err := resource.New(
context.Background(),
resource.WithSchemaURL(semconv.SchemaURL),
resource.WithAttributes(semconv.ServiceName("sample-app")), // Default service name which might get overriden by OTEL_SERVICE_NAME.
resource.WithFromEnv(), // Discover and provide attributes from OTEL_RESOURCE_ATTRIBUTES and OTEL_SERVICE_NAME environment variables.
resource.WithTelemetrySDK(), // Discover and provide information about the OpenTelemetry SDK used.
)
if err != nil {
return nil, fmt.Errorf("creating resource: %w", err)
}
return res, nil
}
func newTraceProvider(exp trace.SpanExporter, res *resource.Resource) *trace.TracerProvider {
return trace.NewTracerProvider(
trace.WithBatcher(exp),
trace.WithResource(res),
)
}
func newTraceExporter(ctx context.Context) (trace.SpanExporter, error) {
var exporterEnv = os.Getenv("OTEL_TRACES_EXPORTER")
var endpointEnv = os.Getenv("OTEL_EXPORTER_OTLP_TRACES_ENDPOINT")
if exporterEnv == "otlp" || endpointEnv != "" {
exporter, err := otlptracegrpc.New(ctx)
if err != nil {
return nil, fmt.Errorf("creating OTLP trace exporter: %w", err)
}
logger.Info("using OTLP trace exporter with endpoint: " + exporterEnv)
return exporter, nil
}
exporter, err := stdouttrace.New()
if err != nil {
return nil, fmt.Errorf("creating stdout trace exporter: %w", err)
}
logger.Info("using console trace exporter")
return exporter, nil
}
func newMeterProvider(exp metric.Reader, res *resource.Resource) *metric.MeterProvider {
meterProvider := metric.NewMeterProvider(
metric.WithResource(res),
metric.WithReader(exp),
)
return meterProvider
}
func newMetricReader(ctx context.Context) (metric.Reader, error) {
var exporterEnv = os.Getenv("OTEL_METRICS_EXPORTER")
var endpointEnv = os.Getenv("OTEL_EXPORTER_OTLP_METRICS_ENDPOINT")
if exporterEnv == "prometheus" {
reader, err := prometheus.New()
if err != nil {
return nil, fmt.Errorf("creating prometheus metric reader: %w", err)
}
logger.Info("Using Prometheus metric exporter")
return reader, nil
}
if exporterEnv == "otlp" || endpointEnv != "" {
exporter, err := otlpmetricgrpc.New(ctx)
if err != nil {
return nil, fmt.Errorf("creating OTLP metric exporter: %w", err)
}
logger.Info("using OTLP metric exporter with endpoint: " + endpointEnv)
return metric.NewPeriodicReader(exporter, metric.WithInterval(10*time.Second)), nil
}
exporter, err := stdoutmetric.New()
if err != nil {
return nil, fmt.Errorf("creating stdout metric exporter: %w", err)
}
logger.Info("using console metric exporter")
return metric.NewPeriodicReader(exporter,
// Default is 1m. Set to 10s for demonstrative purposes.
metric.WithInterval(5*time.Second)), nil
}