github.com/celestiaorg/celestia-node@v0.15.0-beta.1/nodebuilder/node/metrics.go (about) 1 package node 2 3 import ( 4 "context" 5 "time" 6 7 "go.opentelemetry.io/otel" 8 "go.opentelemetry.io/otel/attribute" 9 "go.opentelemetry.io/otel/metric" 10 ) 11 12 var meter = otel.Meter("node") 13 14 var ( 15 timeStarted time.Time 16 nodeStarted bool 17 ) 18 19 // WithMetrics registers node metrics. 20 func WithMetrics() error { 21 nodeStartTS, err := meter.Int64ObservableGauge( 22 "node_start_ts", 23 metric.WithDescription("timestamp when the node was started"), 24 ) 25 if err != nil { 26 return err 27 } 28 29 totalNodeRunTime, err := meter.Float64ObservableCounter( 30 "node_runtime_counter_in_seconds", 31 metric.WithDescription("total time the node has been running"), 32 ) 33 if err != nil { 34 return err 35 } 36 37 buildInfoGauge, err := meter.Float64ObservableGauge( 38 "build_info", 39 metric.WithDescription("Celestia Node build information"), 40 ) 41 if err != nil { 42 return err 43 } 44 45 callback := func(ctx context.Context, observer metric.Observer) error { 46 if !nodeStarted { 47 // Observe node start timestamp 48 timeStarted = time.Now() 49 observer.ObserveInt64(nodeStartTS, timeStarted.Unix()) 50 nodeStarted = true 51 } 52 53 observer.ObserveFloat64(totalNodeRunTime, time.Since(timeStarted).Seconds()) 54 55 // Observe build info with labels 56 labels := metric.WithAttributes( 57 attribute.String("build_time", buildTime), 58 attribute.String("last_commit", lastCommit), 59 attribute.String("semantic_version", semanticVersion), 60 attribute.String("system_version", systemVersion), 61 attribute.String("golang_version", golangVersion), 62 ) 63 64 observer.ObserveFloat64(buildInfoGauge, 1, labels) 65 66 return nil 67 } 68 69 _, err = meter.RegisterCallback(callback, nodeStartTS, totalNodeRunTime, buildInfoGauge) 70 71 return err 72 }