mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-19 19:30:44 +00:00
renamed otel to rpc tracing
This commit is contained in:
parent
0370f6392e
commit
ff75f4a0d2
4 changed files with 37 additions and 48 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue