Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 28 additions & 1 deletion clue/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@

"github.com/go-logr/logr"
"go.opentelemetry.io/otel"
otellog "go.opentelemetry.io/otel/log"
"go.opentelemetry.io/otel/log/global"
"go.opentelemetry.io/otel/metric"
metricnoop "go.opentelemetry.io/otel/metric/noop"
"go.opentelemetry.io/otel/propagation"
sdklog "go.opentelemetry.io/otel/sdk/log"
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
Expand All @@ -30,6 +33,8 @@
MeterProvider metric.MeterProvider
// TracerProvider is the OpenTelemetry tracer provider used clue
TracerProvider trace.TracerProvider
// LoggerProvider is the OpenTelemetry logger provider used by clue
LoggerProvider otellog.LoggerProvider
// Propagators is the OpenTelemetry propagator used by clue
Propagators propagation.TextMapPropagator
// ErrorHandler is the error handler used by OpenTelemetry
Expand All @@ -42,9 +47,15 @@
func ConfigureOpenTelemetry(ctx context.Context, cfg *Config) {
otel.SetMeterProvider(cfg.MeterProvider)
otel.SetTracerProvider(cfg.TracerProvider)
global.SetLoggerProvider(cfg.LoggerProvider)
otel.SetTextMapPropagator(cfg.Propagators)
otel.SetLogger(logr.New(log.ToLogrSink(ctx)))
otel.SetErrorHandler(cfg.ErrorHandler)

if cfg.LoggerProvider != nil {
otelLogger := cfg.LoggerProvider.Logger("clue")
ctx = log.Context(ctx, log.WithOTELLogger(otelLogger))

Check failure on line 57 in clue/config.go

View workflow job for this annotation

GitHub Actions / tests

ineffectual assignment to ctx (ineffassign)
}
}

// NewConfig creates a new Config object adequate for use by
Expand All @@ -67,13 +78,18 @@
// if err != nil {
// return err
// }
// cfg := clue.NewConfig(ctx, "mysvc", "1.0.0", metricExporter, spanExporter)
// logExporter, err := stdoutlog.New()
// if err != nil {
// return err
// }
// cfg := clue.NewConfig(ctx, "mysvc", "1.0.0", metricExporter, spanExporter, logExporter)
func NewConfig(
ctx context.Context,
svcName string,
svcVersion string,
metricExporter sdkmetric.Exporter,
spanExporter sdktrace.SpanExporter,
logExporter sdklog.Exporter,
opts ...Option,
) (*Config, error) {
options := defaultOptions(ctx)
Expand Down Expand Up @@ -125,9 +141,20 @@
sdktrace.WithBatcher(spanExporter),
)
}
var loggerProvider otellog.LoggerProvider
if logExporter == nil {
loggerProvider = global.GetLoggerProvider()
} else {
loggerProvider = sdklog.NewLoggerProvider(
sdklog.WithResource(res),
sdklog.WithProcessor(sdklog.NewBatchProcessor(logExporter)),
)
}

return &Config{
MeterProvider: meterProvider,
TracerProvider: tracerProvider,
LoggerProvider: loggerProvider,
Propagators: options.propagators,
ErrorHandler: options.errorHandler,
}, nil
Expand Down
9 changes: 9 additions & 0 deletions clue/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/stdout/stdoutlog"
"go.opentelemetry.io/otel/exporters/stdout/stdoutmetric"
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
"go.opentelemetry.io/otel/metric"
metricnoop "go.opentelemetry.io/otel/metric/noop"
"go.opentelemetry.io/otel/propagation"
sdklog "go.opentelemetry.io/otel/sdk/log"
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/trace"
Expand Down Expand Up @@ -87,12 +89,15 @@ func TestNewConfig(t *testing.T) {
require.NoError(t, err)
metricsExporter, err := stdoutmetric.New()
require.NoError(t, err)
logExporter, err := stdoutlog.New()
require.NoError(t, err)
noopErrorHandler := dummyErrorHandler{}

cases := []struct {
name string
metricsExporter sdkmetric.Exporter
spanExporter sdktrace.SpanExporter
logExporter sdklog.Exporter
propagators propagation.TextMapPropagator
errorHandler otel.ErrorHandler

Expand All @@ -107,6 +112,9 @@ func TestNewConfig(t *testing.T) {
}, {
name: "tracer provider",
spanExporter: spanExporter,
}, {
name: "log exporter",
logExporter: logExporter,
}, {
name: "propagators",
propagators: propagation.Baggage{},
Expand All @@ -124,6 +132,7 @@ func TestNewConfig(t *testing.T) {
svcVersion,
c.metricsExporter,
c.spanExporter,
c.logExporter,
WithPropagators(c.propagators),
WithErrorHandler(c.errorHandler))
require.NoError(t, err)
Expand Down
39 changes: 39 additions & 0 deletions clue/exporters.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@ package clue
import (
"context"

"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp"
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
otellog "go.opentelemetry.io/otel/sdk/log"
"go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/trace"

Expand All @@ -15,12 +18,31 @@ import (

// Allow mocking
var (
otlploggrpcNew = otlploggrpc.New
otlploghttpNew = otlploghttp.New
otlpmetricgrpcNew = otlpmetricgrpc.New
otlpmetrichttpNew = otlpmetrichttp.New
otlptracegrpcNew = otlptracegrpc.New
otlptracehttpNew = otlptracehttp.New
)

// NewGRPCLogExporter returns an OpenTelementry Protocol logs exporter that
// report logs to a gRPC collector.
func NewGRPCLogExporter(ctx context.Context, options ...otlploggrpc.Option) (exporter otellog.Exporter, shutdown func(), err error) {
exporter, err = otlploggrpcNew(ctx, options...)
if err != nil {
return
}
shutdown = func() {
// Create new context in case the parent context has been canceled.
ctx := log.WithContext(context.Background(), ctx)
if err := exporter.Shutdown(ctx); err != nil {
log.Errorf(ctx, err, "failed to shutdown log exporter")
}
}
return
}

// NewGRPCMetricExporter returns an OpenTelementry Protocol metric exporter that
// report metrics to a gRPC collector.
func NewGRPCMetricExporter(ctx context.Context, options ...otlpmetricgrpc.Option) (exporter metric.Exporter, shutdown func(), err error) {
Expand Down Expand Up @@ -55,6 +77,23 @@ func NewGRPCSpanExporter(ctx context.Context, options ...otlptracegrpc.Option) (
return
}

// NewHTTPLogExporter returns an OpenTelementry Protocol logs exporter that
// report logs to a HTTP collector.
func NewHTTPLogExporter(ctx context.Context, options ...otlploghttp.Option) (exporter otellog.Exporter, shutdown func(), err error) {
exporter, err = otlploghttpNew(ctx, options...)
if err != nil {
return
}
shutdown = func() {
// Create new context in case the parent context has been canceled.
ctx := log.WithContext(context.Background(), ctx)
if err := exporter.Shutdown(ctx); err != nil {
log.Errorf(ctx, err, "failed to shutdown log exporter")
}
}
return
}

// NewHTTPMetricExporter returns an OpenTelementry Protocol metric exporter that
// report metrics to a HTTP collector.
func NewHTTPMetricExporter(ctx context.Context, options ...otlpmetrichttp.Option) (exporter metric.Exporter, shutdown func(), err error) {
Expand Down
15 changes: 15 additions & 0 deletions example/weather/services/forecaster/cmd/forecaster/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
"go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"goa.design/clue/clue"
Expand Down Expand Up @@ -82,11 +83,25 @@ func main() {
log.Errorf(ctx, err, "failed to shutdown metrics")
}
}()
logExporter, err := otlploggrpc.New(ctx,
otlploggrpc.WithEndpoint(*coladdr),
otlploggrpc.WithInsecure())
if err != nil {
log.Errorf(ctx, err, "failed to initialize logging")
}
defer func() {
ctx := log.Context(context.Background())
if err := logExporter.Shutdown(ctx); err != nil {
log.Errorf(ctx, err, "failed to shutdown logging")
}
}()

cfg, err := clue.NewConfig(ctx,
genforecaster.ServiceName,
genforecaster.APIVersion,
metricExporter,
spanExporter,
logExporter,
)
if err != nil {
log.Fatalf(ctx, err, "failed to initialize instrumentation")
Expand Down
15 changes: 15 additions & 0 deletions example/weather/services/front/cmd/front/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (

"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"goa.design/clue/clue"
Expand Down Expand Up @@ -85,11 +86,25 @@ func main() {
log.Errorf(ctx, err, "failed to shutdown metrics")
}
}()
logExporter, err := otlploggrpc.New(ctx,
otlploggrpc.WithEndpoint(*coladdr),
otlploggrpc.WithInsecure())
if err != nil {
log.Errorf(ctx, err, "failed to initialize logging")
}
defer func() {
// Create new context in case the parent context has been canceled.
ctx := log.Context(context.Background(), log.WithFormat(format))
if err := logExporter.Shutdown(ctx); err != nil {
log.Errorf(ctx, err, "failed to shutdown logging")
}
}()
cfg, err := clue.NewConfig(ctx,
genfront.ServiceName,
genfront.APIVersion,
metricExporter,
spanExporter,
logExporter,
)
if err != nil {
log.Fatalf(ctx, err, "failed to initialize instrumentation")
Expand Down
15 changes: 15 additions & 0 deletions example/weather/services/locator/cmd/locator/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
"go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"goa.design/clue/clue"
Expand Down Expand Up @@ -84,11 +85,25 @@ func main() {
log.Errorf(ctx, err, "failed to shutdown metrics")
}
}()
logExporter, err := otlploggrpc.New(ctx,
otlploggrpc.WithEndpoint(*oteladdr),
otlploggrpc.WithInsecure())
if err != nil {
log.Errorf(ctx, err, "failed to initialize logging")
}
defer func() {
// Create new context in case the parent context has been canceled.
ctx := log.Context(context.Background(), log.WithFormat(format))
if err := logExporter.Shutdown(ctx); err != nil {
log.Errorf(ctx, err, "failed to shutdown logging")
}
}()
cfg, err := clue.NewConfig(ctx,
genlocator.ServiceName,
genlocator.APIVersion,
metricExporter,
spanExporter,
logExporter,
)
if err != nil {
log.Fatalf(ctx, err, "failed to initialize instrumentation")
Expand Down
15 changes: 15 additions & 0 deletions example/weather/services/tester/cmd/tester/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"time"

"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"goa.design/clue/clue"
Expand Down Expand Up @@ -86,11 +87,25 @@ func main() {
log.Errorf(ctx, err, "failed to shutdown metrics")
}
}()
logExporter, err := otlploggrpc.New(ctx,
otlploggrpc.WithEndpoint(*oteladdr),
otlploggrpc.WithInsecure())
if err != nil {
log.Errorf(ctx, err, "failed to initialize logging")
}
defer func() {
// Create new context in case the parent context has been canceled.
ctx := log.Context(context.Background(), log.WithFormat(format))
if err := logExporter.Shutdown(ctx); err != nil {
log.Errorf(ctx, err, "failed to shutdown logging")
}
}()
cfg, err := clue.NewConfig(ctx,
gentester.ServiceName,
gentester.APIVersion,
metricExporter,
spanExporter,
logExporter,
)
if err != nil {
log.Fatalf(ctx, err, "failed to initialize instrumentation")
Expand Down
5 changes: 5 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,20 @@ require (
github.com/stretchr/testify v1.11.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0
go.opentelemetry.io/otel v1.37.0
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.13.0
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.37.0
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.37.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0
go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.13.0
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.37.0
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.37.0
go.opentelemetry.io/otel/log v0.13.0
go.opentelemetry.io/otel/metric v1.37.0
go.opentelemetry.io/otel/sdk v1.37.0
go.opentelemetry.io/otel/sdk/log v0.13.0
go.opentelemetry.io/otel/sdk/metric v1.37.0
go.opentelemetry.io/otel/trace v1.37.0
goa.design/goa/v3 v3.22.1
Expand Down
12 changes: 12 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/X
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY=
go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0 h1:z6lNIajgEBVtQZHjfw2hAccPEBDs+nx58VemmXWa2ec=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0/go.mod h1:+kyc3bRx/Qkq05P6OCu3mTEIOxYRYzoIg+JsUp5X+PM=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.13.0 h1:zUfYw8cscHHLwaY8Xz3fiJu+R59xBnkgq2Zr1lwmK/0=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.13.0/go.mod h1:514JLMCcFLQFS8cnTepOk6I09cKWJ5nGHBxHrMJ8Yfg=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.37.0 h1:zG8GlgXCJQd5BU98C0hZnBbElszTmUgCNCfYneaDL0A=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.37.0/go.mod h1:hOfBCz8kv/wuq73Mx2H2QnWokh/kHZxkh6SNF2bdKtw=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.37.0 h1:9PgnL3QNlj10uGxExowIDIZu66aVBwWhXmbOp1pa6RA=
Expand All @@ -59,14 +63,22 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 h1:EtFWS
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0/go.mod h1:QjUEoiGCPkvFZ/MjK6ZZfNOS6mfVEVKYE99dFhuN2LI=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0 h1:bDMKF3RUSxshZ5OjOTi8rsHGaPKsAt76FaqgvIUySLc=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0/go.mod h1:dDT67G/IkA46Mr2l9Uj7HsQVwsjASyV9SjGofsiUZDA=
go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.13.0 h1:yEX3aC9KDgvYPhuKECHbOlr5GLwH6KTjLJ1sBSkkxkc=
go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.13.0/go.mod h1:/GXR0tBmmkxDaCUGahvksvp66mx4yh5+cFXgSlhg0vQ=
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.37.0 h1:6VjV6Et+1Hd2iLZEPtdV7vie80Yyqf7oikJLjQ/myi0=
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.37.0/go.mod h1:u8hcp8ji5gaM/RfcOo8z9NMnf1pVLfVY7lBY2VOGuUU=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.37.0 h1:SNhVp/9q4Go/XHBkQ1/d5u9P/U+L1yaGPoi0x+mStaI=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.37.0/go.mod h1:tx8OOlGH6R4kLV67YaYO44GFXloEjGPZuMjEkaaqIp4=
go.opentelemetry.io/otel/log v0.13.0 h1:yoxRoIZcohB6Xf0lNv9QIyCzQvrtGZklVbdCoyb7dls=
go.opentelemetry.io/otel/log v0.13.0/go.mod h1:INKfG4k1O9CL25BaM1qLe0zIedOpvlS5Z7XgSbmN83E=
go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg=
go.opentelemetry.io/otel/sdk/log v0.13.0 h1:I3CGUszjM926OphK8ZdzF+kLqFvfRY/IIoFq/TjwfaQ=
go.opentelemetry.io/otel/sdk/log v0.13.0/go.mod h1:lOrQyCCXmpZdN7NchXb6DOZZa1N5G1R2tm5GMMTpDBw=
go.opentelemetry.io/otel/sdk/log/logtest v0.13.0 h1:9yio6AFZ3QD9j9oqshV1Ibm9gPLlHNxurno5BreMtIA=
go.opentelemetry.io/otel/sdk/log/logtest v0.13.0/go.mod h1:QOGiAJHl+fob8Nu85ifXfuQYmJTFAvcrxL6w5/tu168=
go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc=
go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
Expand Down
Loading
Loading