github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/telemetry/metrics/init.go (about) 1 package metrics 2 3 import ( 4 "context" 5 6 "github.com/gnolang/gno/tm2/pkg/telemetry/config" 7 "github.com/gnolang/gno/tm2/pkg/telemetry/exporter" 8 "go.opentelemetry.io/otel" 9 "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc" 10 "go.opentelemetry.io/otel/metric" 11 sdkMetric "go.opentelemetry.io/otel/sdk/metric" 12 "go.opentelemetry.io/otel/sdk/resource" 13 semconv "go.opentelemetry.io/otel/semconv/v1.4.0" 14 ) 15 16 var ( 17 // Metrics. 18 BroadcastTxTimer metric.Int64Histogram 19 BuildBlockTimer metric.Int64Histogram 20 ) 21 22 func Init(config config.Config) error { 23 if config.ExporterEndpoint == "" { 24 return exporter.ErrEndpointNotSet 25 } 26 27 // Use oltp metric exporter. 28 exporter, err := otlpmetricgrpc.New( 29 context.Background(), 30 otlpmetricgrpc.WithEndpoint(config.ExporterEndpoint), 31 otlpmetricgrpc.WithInsecure(), // TODO: enable security 32 ) 33 if err != nil { 34 return err 35 } 36 37 provider := sdkMetric.NewMeterProvider( 38 // Default period is 1m. 39 sdkMetric.WithReader(sdkMetric.NewPeriodicReader(exporter)), 40 sdkMetric.WithResource( 41 resource.NewWithAttributes( 42 semconv.SchemaURL, 43 semconv.ServiceNameKey.String(config.ServiceName), 44 semconv.ServiceVersionKey.String("1.0.0"), 45 semconv.ServiceInstanceIDKey.String("gno-node-1"), 46 ), 47 ), 48 ) 49 otel.SetMeterProvider(provider) 50 meter := provider.Meter(config.MeterName) 51 52 if BroadcastTxTimer, err = meter.Int64Histogram( 53 "broadcast_tx_hist", 54 metric.WithDescription("broadcast tx duration"), 55 metric.WithUnit("ms"), 56 ); err != nil { 57 return err 58 } 59 60 if BuildBlockTimer, err = meter.Int64Histogram( 61 "build_block_hist", 62 metric.WithDescription("block build duration"), 63 metric.WithUnit("ms"), 64 ); err != nil { 65 return err 66 } 67 68 return nil 69 }