diff options
author | Connor Brewster <cbrewster@hey.com> | 2024-01-21T20·52-0600 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2024-01-23T15·50+0000 |
commit | d0563294121a85ecddbcc44474373b9293c31e7f (patch) | |
tree | 021246b2b903485df2447b80b767cca7600d6757 /tvix/nar-bridge/cmd/nar-bridge-http/main.go | |
parent | e8061fc6190fdeaadb9d8ebc8d8dba15c9c6f5c4 (diff) |
feat(tvix/store/nar-bridge): Setup OpenTelemetry r/7442
Sets up OpenTelemetry integration for nar-bridge. Right now it will export spans for HTTP server requests and all gRPC client requests. Having the spans available will make performance work significantly easier as it provides a high level overview of where time is being spent. In the future we can add application-specifc metrics and integrate logrus. Change-Id: Ie3860675d7ffc626a95673ba062c3c798d8bb2a7 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10678 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Autosubmit: Connor Brewster <cbrewster@hey.com>
Diffstat (limited to 'tvix/nar-bridge/cmd/nar-bridge-http/main.go')
-rw-r--r-- | tvix/nar-bridge/cmd/nar-bridge-http/main.go | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/tvix/nar-bridge/cmd/nar-bridge-http/main.go b/tvix/nar-bridge/cmd/nar-bridge-http/main.go index 2eed4f4f4c4b..171ea7f5bdd0 100644 --- a/tvix/nar-bridge/cmd/nar-bridge-http/main.go +++ b/tvix/nar-bridge/cmd/nar-bridge-http/main.go @@ -4,17 +4,18 @@ import ( "context" "os" "os/signal" + "runtime/debug" "time" "github.com/alecthomas/kong" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" castorev1pb "code.tvl.fyi/tvix/castore-go" narBridgeHttp "code.tvl.fyi/tvix/nar-bridge/pkg/http" storev1pb "code.tvl.fyi/tvix/store-go" - "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus" ) @@ -24,24 +25,41 @@ var cli struct { ListenAddr string `name:"listen-addr" help:"The address this service listens on" type:"string" default:"[::]:9000"` //nolint:lll EnableAccessLog bool `name:"access-log" help:"Enable access logging" type:"bool" default:"true" negatable:""` //nolint:lll StoreAddr string `name:"store-addr" help:"The address to the tvix-store RPC interface this will connect to" default:"localhost:8000"` //nolint:lll + EnableOtlp bool `name:"otlp" help:"Enable OpenTelemetry for logs, spans, and metrics" default:"true"` //nolint:lll } func main() { _ = kong.Parse(&cli) - logLevel, err := logrus.ParseLevel(cli.LogLevel) + logLevel, err := log.ParseLevel(cli.LogLevel) if err != nil { log.Panic("invalid log level") return } - logrus.SetLevel(logLevel) + log.SetLevel(logLevel) ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) defer stop() + if cli.EnableOtlp { + buildInfo, ok := debug.ReadBuildInfo() + if !ok { + log.Fatal("failed to read build info") + } + + shutdown, err := setupOpenTelemetry(ctx, "nar-bridge", buildInfo.Main.Version) + if err != nil { + log.WithError(err).Fatal("failed to setup OpenTelemetry") + } + defer shutdown(context.Background()) + } + // connect to tvix-store log.Debugf("Dialing to %v", cli.StoreAddr) - conn, err := grpc.DialContext(ctx, cli.StoreAddr, grpc.WithTransportCredentials(insecure.NewCredentials())) + conn, err := grpc.DialContext(ctx, cli.StoreAddr, + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithStatsHandler(otelgrpc.NewClientHandler()), + ) if err != nil { log.Fatalf("did not connect: %v", err) } |