renamed otel to rpc tracing

This commit is contained in:
jonny rhea 2026-01-03 10:43:07 -06:00 committed by Felix Lange
parent 0370f6392e
commit ff75f4a0d2
4 changed files with 37 additions and 48 deletions

View file

@ -242,13 +242,13 @@ func makeFullNode(ctx *cli.Context) *node.Node {
// Start metrics export if enabled // Start metrics export if enabled
utils.SetupMetrics(&cfg.Metrics) utils.SetupMetrics(&cfg.Metrics)
// Setup OpenTelemetry tracing if enabled // Setup RPC tracing if enabled
otelService, err := utils.SetupOTEL(ctx) rpcTracingService, err := utils.SetupRPCTracing(ctx)
if err != nil { if err != nil {
utils.Fatalf("failed to setup OpenTelemetry: %v", err) utils.Fatalf("failed to setup rpc tracing: %v", err)
} }
if otelService != nil { if rpcTracingService != nil {
utils.RegisterOTELService(otelService, stack) utils.RegisterRPCTracingService(rpcTracingService, stack)
} }
backend, eth := utils.RegisterEthService(stack, &cfg.Eth) backend, eth := utils.RegisterEthService(stack, &cfg.Eth)

View file

@ -196,6 +196,8 @@ var (
utils.RPCTxSyncDefaultTimeoutFlag, utils.RPCTxSyncDefaultTimeoutFlag,
utils.RPCTxSyncMaxTimeoutFlag, utils.RPCTxSyncMaxTimeoutFlag,
utils.RPCGlobalRangeLimitFlag, utils.RPCGlobalRangeLimitFlag,
utils.RPCTracingFlag,
utils.RPCTracingEndpointFlag,
} }
metricsFlags = []cli.Flag{ metricsFlags = []cli.Flag{
@ -215,12 +217,6 @@ var (
utils.MetricsInfluxDBOrganizationFlag, utils.MetricsInfluxDBOrganizationFlag,
utils.StateSizeTrackingFlag, utils.StateSizeTrackingFlag,
} }
otelFlags = []cli.Flag{
utils.OTELEnabledFlag,
utils.OTELEndpointFlag,
utils.OTELServiceNameFlag,
}
) )
var app = flags.NewApp("the go-ethereum command line interface") var app = flags.NewApp("the go-ethereum command line interface")
@ -271,7 +267,6 @@ func init() {
consoleFlags, consoleFlags,
debug.Flags, debug.Flags,
metricsFlags, metricsFlags,
otelFlags,
) )
flags.AutoEnvVars(app.Flags, "GETH") flags.AutoEnvVars(app.Flags, "GETH")

View file

@ -1043,23 +1043,17 @@ Please note that --` + MetricsHTTPFlag.Name + ` must be set to start the server.
Category: flags.MetricsCategory, Category: flags.MetricsCategory,
} }
OTELEnabledFlag = &cli.BoolFlag{ // RPC Tracing
Name: "otel.enabled", RPCTracingFlag = &cli.BoolFlag{
Usage: "Enable OpenTelemetry tracing", Name: "rpc.tracing",
Category: flags.LoggingCategory, Usage: "Enable RPC tracing",
Category: flags.APICategory,
} }
OTELEndpointFlag = &cli.StringFlag{ RPCTracingEndpointFlag = &cli.StringFlag{
Name: "otel.endpoint", Name: "rpc.tracing.endpoint",
Usage: "Defines where OpenTelemetry traces are sent (e.g., http://localhost:4318)", Usage: "Defines where RPC traces are sent (e.g., http://localhost:4318)",
Category: flags.LoggingCategory, Category: flags.APICategory,
}
OTELServiceNameFlag = &cli.StringFlag{
Name: "otel.service-name",
Usage: "Service name for OpenTelemetry traces",
Value: "geth",
Category: flags.LoggingCategory,
} }
) )

View file

@ -35,38 +35,37 @@ import (
semconv "go.opentelemetry.io/otel/semconv/v1.24.0" semconv "go.opentelemetry.io/otel/semconv/v1.24.0"
) )
// otelService wraps the OpenTelemetry TracerProvider to implement node.Lifecycle. // rpcTracingService wraps the OpenTelemetry TracerProvider to implement node.Lifecycle.
type otelService struct { type rpcTracingService struct {
tracerProvider *sdktrace.TracerProvider tracerProvider *sdktrace.TracerProvider
} }
// Start implements node.Lifecycle. // Start implements node.Lifecycle.
func (o *otelService) Start() error { func (r *rpcTracingService) Start() error {
return nil // Provider is already started during setup return nil // Provider is already started during setup
} }
// Stop implements node.Lifecycle // Stop implements node.Lifecycle
func (o *otelService) Stop() error { func (r *rpcTracingService) Stop() error {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel() defer cancel()
if err := o.tracerProvider.Shutdown(ctx); err != nil { if err := r.tracerProvider.Shutdown(ctx); err != nil {
log.Error("Failed to stop OTEL Service", "err", err) log.Error("Failed to stop RPC Tracing Service", "err", err)
return err return err
} }
log.Info("OTEL Service stopped") log.Info("RPC Tracing Service stopped")
return nil return nil
} }
// SetupOTEL initializes OpenTelemetry tracing based on CLI flags. // SetupRPCTracing initializes OpenTelemetry tracing based on CLI flags.
func SetupOTEL(ctx *cli.Context) (*otelService, error) { func SetupRPCTracing(ctx *cli.Context) (*rpcTracingService, error) {
if !ctx.Bool(OTELEnabledFlag.Name) { if !ctx.Bool(RPCTracingFlag.Name) {
return nil, nil return nil, nil
} }
endpoint := ctx.String(OTELEndpointFlag.Name) endpoint := ctx.String(RPCTracingEndpointFlag.Name)
if endpoint == "" { if endpoint == "" {
return nil, nil return nil, nil
} }
serviceName := ctx.String(OTELServiceNameFlag.Name)
setupCtx := ctx.Context setupCtx := ctx.Context
if setupCtx == nil { if setupCtx == nil {
setupCtx = context.Background() setupCtx = context.Background()
@ -75,7 +74,7 @@ func SetupOTEL(ctx *cli.Context) (*otelService, error) {
// Create exporter based on endpoint URL // Create exporter based on endpoint URL
u, err := url.Parse(endpoint) u, err := url.Parse(endpoint)
if err != nil { if err != nil {
return nil, fmt.Errorf("invalid otel endpoint URL: %w", err) return nil, fmt.Errorf("invalid rpc tracing endpoint URL: %w", err)
} }
var exporter sdktrace.SpanExporter var exporter sdktrace.SpanExporter
@ -92,17 +91,17 @@ func SetupOTEL(ctx *cli.Context) (*otelService, error) {
} }
exporter, err = otlptracehttp.New(setupCtx, opts...) exporter, err = otlptracehttp.New(setupCtx, opts...)
default: default:
return nil, fmt.Errorf("unsupported otel url scheme: %s", u.Scheme) return nil, fmt.Errorf("unsupported rpc tracing url scheme: %s", u.Scheme)
} }
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to create otel exporter: %w", err) return nil, fmt.Errorf("failed to create rpc tracing exporter: %w", err)
} }
// Create resource with service information // Create resource with service information
res := resource.NewWithAttributes( res := resource.NewWithAttributes(
semconv.SchemaURL, semconv.SchemaURL,
semconv.ServiceName(serviceName), semconv.ServiceName("geth"),
attribute.String("client.name", version.ClientName("geth")), attribute.String("client.name", version.ClientName("geth")),
) )
@ -122,11 +121,12 @@ func SetupOTEL(ctx *cli.Context) (*otelService, error) {
propagation.Baggage{}, propagation.Baggage{},
)) ))
log.Info("OpenTelemetry tracing enabled", "endpoint", endpoint, "service", serviceName) log.Info("RPC tracing enabled", "endpoint", endpoint)
return &otelService{tracerProvider: tp}, nil return &rpcTracingService{tracerProvider: tp}, nil
} }
// RegisterOTELService registers the otelService with the node so its lifecycle is managed by the node. // RegisterRPCTracingService registers the rpcTracingService with the node
func RegisterOTELService(otelService *otelService, stack *node.Node) { // so its lifecycle is managed by the node.
stack.RegisterLifecycle(otelService) func RegisterRPCTracingService(rpcTracingService *rpcTracingService, stack *node.Node) {
stack.RegisterLifecycle(rpcTracingService)
} }