57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package opentelemetry
|
|
|
|
import (
|
|
"context"
|
|
"go.opentelemetry.io/otel"
|
|
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
|
|
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp"
|
|
"go.opentelemetry.io/otel/sdk/metric"
|
|
"os"
|
|
)
|
|
|
|
var (
|
|
DefaultMeter = otel.Meter("")
|
|
)
|
|
|
|
func Configure(ctx context.Context) error {
|
|
// Avoid logging errors when local OpenTelemetry Collector is not available, for example:
|
|
// "failed to upload metrics: [...]: dial tcp 127.0.0.1:4318: connect: connection refused"
|
|
otel.SetErrorHandler(otel.ErrorHandlerFunc(func(err error) {
|
|
// do nothing
|
|
}))
|
|
|
|
// Work around https://github.com/open-telemetry/opentelemetry-go/issues/4834
|
|
if _, ok := os.LookupEnv("OTEL_EXPORTER_OTLP_ENDPOINT"); !ok {
|
|
if err := os.Setenv("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4318"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if err := setupMeterProvider(ctx); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func setupMeterProvider(ctx context.Context) error {
|
|
httpExporter, err := otlpmetrichttp.New(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
grpcExporter, err := otlpmetricgrpc.New(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
meterProvider := metric.NewMeterProvider(
|
|
metric.WithReader(metric.NewPeriodicReader(httpExporter)),
|
|
metric.WithReader(metric.NewPeriodicReader(grpcExporter)),
|
|
)
|
|
|
|
otel.SetMeterProvider(meterProvider)
|
|
|
|
return nil
|
|
}
|