in pkg/observability/opentelemetry.go [63:87]
func InitMetrics(enabled bool, port int) (Metrics, error) {
exporter, err := prometheus.New()
if err != nil {
return Metrics{}, fmt.Errorf("failed to create Prometheus exporter: %w", err)
}
provider := metric.NewMeterProvider(metric.WithReader(exporter))
metrics, err := registerMetricsWith(provider)
if err != nil {
return Metrics{}, fmt.Errorf("failed to register metrics with Prometheus provider: %w", err)
}
metrics.enabled = enabled
// Starts an async process to collect golang runtime stats
// go.opentelemetry.io/contrib/instrumentation/runtime
err = runtime.Start(runtime.WithMeterProvider(provider), runtime.WithMinimumReadMemStatsInterval(1*time.Second))
if err != nil {
return Metrics{}, fmt.Errorf("failed to start Go runtime metrics collection: %w", err)
}
if enabled {
serveMetrics(port)
}
return metrics, nil
}