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  }