in cassandra-bigtable-migration-tools/cassandra-bigtable-proxy/otel/otel.go [98:158]
func NewOpenTelemetry(ctx context.Context, config *OTelConfig, logger *zap.Logger) (*OpenTelemetry, func(context.Context) error, error) {
otelInst := &OpenTelemetry{Config: config, logger: logger}
var err error
otelInst.Config.OTELEnabled = config.OTELEnabled
if !config.OTELEnabled {
return otelInst, nil, nil
}
if config.HealthCheckEnabled {
resp, err := http.Get("http://" + config.HealthCheckEp)
if err != nil {
return nil, nil, err
}
if resp.StatusCode != 200 {
return nil, nil, errors.New("OTEL collector service is not up and running")
}
logger.Info("OTEL health check complete")
}
var shutdownFuncs []func(context.Context) error
otelResource := buildOtelResource(ctx, config)
// Initialize tracerProvider
tracerProvider, err := InitTracerProvider(ctx, config, otelResource)
if err != nil {
logger.Error("error while initializing the tracer provider", zap.Error(err))
return nil, nil, err
}
otel.SetTracerProvider(tracerProvider)
otelInst.tracer = tracerProvider.Tracer(config.ServiceName)
shutdownFuncs = append(shutdownFuncs, tracerProvider.Shutdown)
// Initialize MeterProvider
meterProvider, err := InitMeterProvider(ctx, config, otelResource)
if err != nil {
logger.Error("error while initializing the meter provider", zap.Error(err))
return nil, nil, err
}
otel.SetMeterProvider(meterProvider)
meter := meterProvider.Meter(config.ServiceName)
shutdownFuncs = append(shutdownFuncs, meterProvider.Shutdown)
shutdown := shutdownOpenTelemetryComponents(shutdownFuncs)
otelInst.requestCount, err = meter.Int64Counter(requestCountMetric, metric.WithDescription("Records metric for number of query requests coming in"), metric.WithUnit("1"))
if err != nil {
logger.Error("error during registering instrument for metric bigtable/cassandra_adapter/request_count", zap.Error(err))
return nil, nil, err
}
otelInst.requestLatency, err = meter.Int64Histogram(latencyMetric,
metric.WithDescription("Records latency for all query operations"),
metric.WithExplicitBucketBoundaries(0.0, 0.0010, 0.0013, 0.0016, 0.0020, 0.0024, 0.0031, 0.0038, 0.0048, 0.0060,
0.0075, 0.0093, 0.0116, 0.0146, 0.0182, 0.0227, 0.0284, 0.0355, 0.0444, 0.0555, 0.0694, 0.0867,
0.1084, 0.1355, 0.1694, 0.2118, 0.2647, 0.3309, 0.4136, 0.5170, 0.6462, 0.8078, 1.0097, 1.2622,
1.5777, 1.9722, 2.4652, 3.0815, 3.8519, 4.8148, 6.0185, 7.5232, 9.4040, 11.7549, 14.6937, 18.3671,
22.9589, 28.6986, 35.8732, 44.8416, 56.0519, 70.0649, 87.5812, 109.4764, 136.8456, 171.0569, 213.8212,
267.2765, 334.0956, 417.6195, 522.0244, 652.5304),
metric.WithUnit("ms"))
if err != nil {
logger.Error("error during registering instrument for metric bigtable/cassandra_adapter/roundtrip_latencies", zap.Error(err))
return nil, nil, err
}
return otelInst, shutdown, nil
}