Skip to content

Instantly share code, notes, and snippets.

@johnpena
Created December 10, 2022 18:41
Show Gist options
  • Save johnpena/59c1c1661f10c9b2734c4f3737c2a68c to your computer and use it in GitHub Desktop.
Save johnpena/59c1c1661f10c9b2734c4f3737c2a68c to your computer and use it in GitHub Desktop.
package observability
import (
"context"
"fmt"
"github.com/correlatedlabs/pkg/go-common/env"
"github.com/correlatedlabs/pkg/go-common/util"
log "github.com/sirupsen/logrus"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
)
type TempoExporter interface{}
func NewTempoExporter(config *env.CommonConfiguration) (TempoExporter, error) {
if config.TempoEndpoint == "" {
log.Debug("skipping tempo tracing exporting: no tempo endpoint")
}
if config.GrafanaUsername == "" {
log.Debug("skipping tempo tracing exporting: no grafana username")
}
if config.GrafanaAPIKey == "" {
log.Debug("skipping tempo tracing exporting: no grafana api key")
}
authenticationToken := util.B64Encode(fmt.Sprintf("%s:%s", config.GrafanaUsername, config.GrafanaAPIKey))
tempoExporter, err := otlptrace.New(
context.Background(),
otlptracegrpc.NewClient(
otlptracegrpc.WithTLSCredentials(credentials.NewClientTLSFromCert(nil, "")),
otlptracegrpc.WithDialOption(grpc.WithBlock()),
otlptracegrpc.WithEndpoint(config.TempoEndpoint),
otlptracegrpc.WithHeaders(map[string]string{
"Authentication": fmt.Sprintf("Basic %s", authenticationToken),
}),
),
)
if err != nil {
return nil, err
}
res := resource.NewWithAttributes(
semconv.SchemaURL,
semconv.ServiceNameKey.String(config.ServerName),
)
tracerProvider := sdktrace.NewTracerProvider(
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithBatcher(tempoExporter),
sdktrace.WithResource(res),
)
otel.SetTracerProvider(tracerProvider)
log.Debug("initialized tempo tracing exporting")
return nil, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment