diff --git a/cmd/ghalistener/listener/listener.go b/cmd/ghalistener/listener/listener.go index 833c4a38..56b1e237 100644 --- a/cmd/ghalistener/listener/listener.go +++ b/cmd/ghalistener/listener/listener.go @@ -14,6 +14,7 @@ import ( "github.com/go-logr/logr" "github.com/google/uuid" "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/trace" ) const ( @@ -164,17 +165,22 @@ func (l *Listener) Listen(ctx context.Context, handler Handler) error { default: } + ctx, span := otel.Tracer("arc").Start(ctx, "Listener.Listen.loop", trace.WithNewRoot()) + msg, err := l.getMessage(ctx) if err != nil { + span.End() return fmt.Errorf("failed to get message: %w", err) } if msg == nil { _, err := handler.HandleDesiredRunnerCount(ctx, 0, 0) if err != nil { + span.End() return fmt.Errorf("handling nil message failed: %w", err) } + span.End() continue } @@ -182,6 +188,8 @@ func (l *Listener) Listen(ctx context.Context, handler Handler) error { if err := l.handleMessage(context.WithoutCancel(ctx), handler, msg); err != nil { return fmt.Errorf("failed to handle message: %w", err) } + + span.End() } } diff --git a/cmd/ghalistener/main.go b/cmd/ghalistener/main.go index e71a5612..f2f40827 100644 --- a/cmd/ghalistener/main.go +++ b/cmd/ghalistener/main.go @@ -13,6 +13,10 @@ import ( "go.opentelemetry.io/otel" ddotel "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentelemetry" + + "go.opentelemetry.io/otel/exporters/stdout/stdoutlog" + "go.opentelemetry.io/otel/log/global" + otellog "go.opentelemetry.io/otel/sdk/log" ) func main() { @@ -21,6 +25,15 @@ func main() { otel.SetTracerProvider(provider) + loggerProvider, err := newLoggerProvider() + if err != nil { + return + } + + global.SetLoggerProvider(loggerProvider) + + log.Printf("Enabled OpenTelemetry Tracing") + configPath, ok := os.LookupEnv("LISTENER_CONFIG_PATH") if !ok { fmt.Fprintf(os.Stderr, "Error: LISTENER_CONFIG_PATH environment variable is not set\n") @@ -46,3 +59,15 @@ func main() { os.Exit(1) } } + +func newLoggerProvider() (*otellog.LoggerProvider, error) { + logExporter, err := stdoutlog.New() + if err != nil { + return nil, err + } + + loggerProvider := otellog.NewLoggerProvider( + otellog.WithProcessor(otellog.NewBatchProcessor(logExporter)), + ) + return loggerProvider, nil +} diff --git a/go.mod b/go.mod index 0773b8e7..3d8bdebc 100644 --- a/go.mod +++ b/go.mod @@ -24,6 +24,9 @@ require ( github.com/stretchr/testify v1.9.0 github.com/teambition/rrule-go v1.8.2 go.opentelemetry.io/otel v1.27.0 + go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.3.0 + go.opentelemetry.io/otel/log v0.3.0 + go.opentelemetry.io/otel/sdk/log v0.3.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 golang.org/x/net v0.24.0 @@ -107,6 +110,7 @@ require ( github.com/tinylib/msgp v1.1.8 // indirect github.com/urfave/cli v1.22.2 // indirect go.opentelemetry.io/otel/metric v1.27.0 // indirect + go.opentelemetry.io/otel/sdk v1.27.0 // indirect go.opentelemetry.io/otel/trace v1.27.0 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/crypto v0.22.0 // indirect diff --git a/go.sum b/go.sum index d4f480d2..3a3bc628 100644 --- a/go.sum +++ b/go.sum @@ -297,8 +297,16 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 h1:KfYpVmr go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0/go.mod h1:SeQhzAEccGVZVEy7aH87Nh0km+utSpo1pTv6eMMop48= go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= +go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.3.0 h1:6aGq6rMOdOx9B385JpF1OpeL18+6Ho8bTFdxy10oEGY= +go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.3.0/go.mod h1:fdZI+pB2Y6Dpl3Uf+1ZPrkX6cnwsUAhjK1f9yCAlJIM= +go.opentelemetry.io/otel/log v0.3.0 h1:kJRFkpUFYtny37NQzL386WbznUByZx186DpEMKhEGZs= +go.opentelemetry.io/otel/log v0.3.0/go.mod h1:ziCwqZr9soYDwGNbIL+6kAvQC+ANvjgG367HVcyR/ys= go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= +go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= +go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= +go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= +go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=