diff --git a/pkg/telemetry/metrics.go b/pkg/telemetry/metrics.go new file mode 100644 index 0000000..1535460 --- /dev/null +++ b/pkg/telemetry/metrics.go @@ -0,0 +1,28 @@ +package telemetry + +import ( + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/exporters/prometheus" + "go.opentelemetry.io/otel/sdk/metric" +) + +func SetupMeterProvider(plugName string) error { + res, err := newResource(plugName) + + if err != nil { + return err + } + + promReader, err := prometheus.New() + + if err != nil { + return err + } + + meterProvider := metric.NewMeterProvider( + metric.WithResource(res), + metric.WithReader(promReader), + ) + otel.SetMeterProvider(meterProvider) + return nil +} diff --git a/pkg/telemetry/otlp.go b/pkg/telemetry/otlp.go new file mode 100644 index 0000000..bba29c5 --- /dev/null +++ b/pkg/telemetry/otlp.go @@ -0,0 +1,19 @@ +package telemetry + +import ( + "go.opentelemetry.io/otel/sdk/resource" + semconv "go.opentelemetry.io/otel/semconv/v1.26.0" +) + +func newResource(serviceName string) (*resource.Resource, error) { + otelResource, err := resource.Merge(resource.Default(), + resource.NewWithAttributes(semconv.SchemaURL, + semconv.ServiceName(serviceName), + )) + + if err != nil { + return nil, err + } + + return otelResource, nil +} diff --git a/pkg/telemetry/tracing.go b/pkg/telemetry/tracing.go new file mode 100644 index 0000000..1679033 --- /dev/null +++ b/pkg/telemetry/tracing.go @@ -0,0 +1,41 @@ +package telemetry + +import ( + "context" + + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" + "go.opentelemetry.io/otel/sdk/trace" +) + +func SetupTraceProvider(ctx context.Context, plugName string) error { + res, err := newResource(plugName) + + if err != nil { + return err + } + + exporter, err := traceExporter(ctx) + + if err != nil { + return err + } + + provider := trace.NewTracerProvider( + trace.WithResource(res), + trace.WithBatcher(exporter), + ) + + otel.SetTracerProvider(provider) + return nil +} + +func traceExporter(ctx context.Context) (trace.SpanExporter, error) { + spanExporter, err := otlptracegrpc.New(ctx) + + if err != nil { + return nil, err + } + + return spanExporter, nil +}