Skip to content

Commit

Permalink
Self telemetry tidy
Browse files Browse the repository at this point in the history
  • Loading branch information
jmacd committed Oct 16, 2024
1 parent 1ef6fec commit 92088b9
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 74 deletions.
65 changes: 22 additions & 43 deletions lightstep/sdk/internal/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,14 @@
package internal

import (
"errors"
"strings"
"sync"

"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configtelemetry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/otel"
noopmetric "go.opentelemetry.io/otel/metric/noop"
"go.opentelemetry.io/otel/trace"
nooptrace "go.opentelemetry.io/otel/trace/noop"
"go.uber.org/zap"
"strings"
"sync"

"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/otel/attribute"
Expand Down Expand Up @@ -206,46 +205,26 @@ const (

func ConfigureSelfTelemetry(
name string,
selfSpans bool,
selfMetrics bool,
exporterSettings *exporter.Settings,
tracer *trace.Tracer,
telemetryItemsCounter *metricapi.Int64Counter,
) error {
tp trace.TracerProvider,
mp metric.MeterProvider,
) (component.TelemetrySettings, trace.Tracer, metricapi.Int64Counter, error) {
var settings component.TelemetrySettings
// setup logs
logger, err := zap.NewProduction()
if err != nil {
return err
}

exporterSettings.TelemetrySettings.Logger = logger
logger, logErr := zap.NewProduction()

// setup traces
tracerProvider := trace.TracerProvider(nooptrace.NewTracerProvider())
if selfSpans {
tracerProvider = otel.GetTracerProvider()
}

exporterSettings.TelemetrySettings.TracerProvider = tracerProvider
*tracer = exporterSettings.TelemetrySettings.TracerProvider.Tracer(name)

// setup metrics
meterProvider := metricapi.MeterProvider(noopmetric.NewMeterProvider())
if selfMetrics {
meterProvider = NOTelColMeterProvider(otel.GetMeterProvider())
}

exporterSettings.TelemetrySettings.MetricsLevel = configtelemetry.LevelNormal
exporterSettings.TelemetrySettings.MeterProvider = meterProvider
exporterSettings.TelemetrySettings.LeveledMeterProvider = func(level configtelemetry.Level) metricapi.MeterProvider {
return meterProvider
}
// this replaces otelcol_ w/ otelsdk_
mp = NOTelColMeterProvider(mp)

// setup the telemetry item counter metric
if telemetryItemsCounter != nil {
meter := exporterSettings.TelemetrySettings.LeveledMeterProvider(configtelemetry.LevelNormal).Meter(name)
*telemetryItemsCounter, err = meter.Int64Counter(selfTelemetryItemsCounterName)
settings.Logger = logger
settings.TracerProvider = tp
settings.MeterProvider = mp
settings.MetricsLevel = configtelemetry.LevelNormal
settings.LeveledMeterProvider = func(level configtelemetry.Level) metricapi.MeterProvider {
return mp
}

return err
tracer := tp.Tracer(name)
meter := mp.Meter(name)
counter, metErr := meter.Int64Counter(selfTelemetryItemsCounterName)
return settings, tracer, counter, errors.Join(logErr, metErr)
}
28 changes: 19 additions & 9 deletions lightstep/sdk/metric/exporters/otlp/otelcol/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,11 @@ import (
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/processor"
"go.opentelemetry.io/otel"
metricapi "go.opentelemetry.io/otel/metric"
metricnoop "go.opentelemetry.io/otel/metric/noop"
traceapi "go.opentelemetry.io/otel/trace"
tracenoop "go.opentelemetry.io/otel/trace/noop"
"go.uber.org/multierr"
)

Expand Down Expand Up @@ -147,16 +150,23 @@ func NewExporter(ctx context.Context, cfg Config) (metric.PushExporter, error) {
c.settings.ID = component.NewID(component.MustNewType("otel_sdk_metric_otlp"))
}

err := internal.ConfigureSelfTelemetry(
"lightstep-go/sdk/metric",
cfg.SelfSpans,
cfg.SelfMetrics,
&c.settings,
&c.tracer,
&c.counter,
)
if err != nil {
var mp metricapi.MeterProvider = metricnoop.NewMeterProvider()
var tp traceapi.TracerProvider = tracenoop.NewTracerProvider()

if cfg.SelfSpans {
tp = otel.GetTracerProvider()
}
if cfg.SelfMetrics {
mp = otel.GetMeterProvider()
}

if settings, tracer, counter, err :=
internal.ConfigureSelfTelemetry("lightstep-go/sdk/metric", tp, mp); err != nil {
return nil, err
} else {
c.settings.TelemetrySettings = settings
c.tracer = tracer
c.counter = counter
}

exp, err := otelarrowexporter.NewFactory().CreateMetricsExporter(ctx, c.settings, &cfg.Exporter)
Expand Down
31 changes: 21 additions & 10 deletions lightstep/sdk/metric/exporters/prom/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ package prom
import (
"context"
"fmt"
"time"

"github.com/lightstep/otel-launcher-go/lightstep/sdk/internal"
"github.com/lightstep/otel-launcher-go/lightstep/sdk/metric"
"github.com/lightstep/otel-launcher-go/lightstep/sdk/metric/data"
Expand All @@ -26,10 +28,12 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/otel"
metricapi "go.opentelemetry.io/otel/metric"
metricnoop "go.opentelemetry.io/otel/metric/noop"
traceapi "go.opentelemetry.io/otel/trace"
tracenoop "go.opentelemetry.io/otel/trace/noop"
"go.uber.org/multierr"
"time"
)

// TODO: Config, Option, and the option impls are duplicated between
Expand Down Expand Up @@ -97,16 +101,23 @@ func NewExporter(ctx context.Context, cfg Config) (metric.PushExporter, error) {

c.settings.ID = component.NewID(component.MustNewType("otel_sdk_metric_prom"))

err := internal.ConfigureSelfTelemetry(
"lightstep-go/sdk/metric",
cfg.SelfSpans,
cfg.SelfMetrics,
&c.settings,
&c.tracer,
&c.counter,
)
if err != nil {
var mp metricapi.MeterProvider = metricnoop.NewMeterProvider()
var tp traceapi.TracerProvider = tracenoop.NewTracerProvider()

if cfg.SelfSpans {
tp = otel.GetTracerProvider()
}
if cfg.SelfMetrics {
mp = otel.GetMeterProvider()
}

if settings, tracer, counter, err :=
internal.ConfigureSelfTelemetry("lightstep-go/sdk/metric", tp, mp); err != nil {
return nil, err
} else {
c.settings.TelemetrySettings = settings
c.tracer = tracer
c.counter = counter
}

exp, err := prometheusexporter.NewFactory().CreateMetricsExporter(ctx, c.settings, &cfg.Exporter)
Expand Down
36 changes: 24 additions & 12 deletions lightstep/sdk/trace/exporters/otlp/otelcol/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,14 @@ import (
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/processor"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
otelcodes "go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/metric"
metricapi "go.opentelemetry.io/otel/metric"
metricnoop "go.opentelemetry.io/otel/metric/noop"
"go.opentelemetry.io/otel/sdk/trace"
traceapi "go.opentelemetry.io/otel/trace"
tracenoop "go.opentelemetry.io/otel/trace/noop"
"go.uber.org/multierr"

"github.com/lightstep/otel-launcher-go/lightstep/sdk/internal"
Expand All @@ -53,7 +56,7 @@ type Config struct {

type ExporterOptions struct {
TracerProvider traceapi.TracerProvider
MeterProvider metric.MeterProvider
MeterProvider metricapi.MeterProvider
}

func WithTracerProvider(tp traceapi.TracerProvider) func(*ExporterOptions) {
Expand All @@ -62,7 +65,7 @@ func WithTracerProvider(tp traceapi.TracerProvider) func(*ExporterOptions) {
}
}

func WithMeterProvider(mp metric.MeterProvider) func(*ExporterOptions) {
func WithMeterProvider(mp metricapi.MeterProvider) func(*ExporterOptions) {
return func(opts *ExporterOptions) {
opts.MeterProvider = mp
}
Expand All @@ -75,6 +78,7 @@ type client struct {
batcher processor.Traces
settings exporter.Settings
tracer traceapi.Tracer
counter metricapi.Int64Counter
}

func (c *client) ExportSpans(ctx context.Context, spans []trace.ReadOnlySpan) error {
Expand Down Expand Up @@ -104,6 +108,7 @@ func (c *client) ExportSpans(ctx context.Context, spans []trace.ReadOnlySpan) er
attribute.Bool("success", success),
attribute.String("state", state),
}
c.counter.Add(ctx, int64(count), metricapi.WithAttributes(attrs...))
span.SetAttributes(append(attrs, attribute.Int("num_spans", count))...)
if err == nil {
span.SetStatus(otelcodes.Ok, state)
Expand Down Expand Up @@ -214,16 +219,23 @@ func NewExporter(ctx context.Context, cfg Config, opts ...func(options *Exporter
c.settings.ID = component.NewID(component.MustNewType("otel_sdk_trace_otlp"))
}

err := internal.ConfigureSelfTelemetry(
"lightstep-go/sdk/trace",
cfg.SelfSpans,
cfg.SelfMetrics,
&c.settings,
&c.tracer,
nil,
)
if err != nil {
var mp metricapi.MeterProvider = metricnoop.NewMeterProvider()
var tp traceapi.TracerProvider = tracenoop.NewTracerProvider()

if cfg.SelfSpans {
tp = otel.GetTracerProvider()
}
if cfg.SelfMetrics {
mp = otel.GetMeterProvider()
}

if settings, tracer, counter, err :=
internal.ConfigureSelfTelemetry("lightstep-go/sdk/metric", tp, mp); err != nil {
return nil, err
} else {
c.settings.TelemetrySettings = settings
c.tracer = tracer
c.counter = counter
}

exp, err := otelarrowexporter.NewFactory().CreateTracesExporter(ctx, c.settings, &cfg.Exporter)
Expand Down

0 comments on commit 92088b9

Please sign in to comment.