2024-08-21 14:18:44 +05:30
|
|
|
package instrumentation
|
|
|
|
|
|
|
|
|
|
import (
|
2025-01-24 14:53:02 +05:30
|
|
|
"log/slog"
|
2024-08-21 14:18:44 +05:30
|
|
|
|
2025-03-20 21:01:41 +05:30
|
|
|
"github.com/SigNoz/signoz/pkg/factory"
|
2025-01-24 14:53:02 +05:30
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
2024-08-21 14:18:44 +05:30
|
|
|
sdkmetric "go.opentelemetry.io/otel/metric"
|
|
|
|
|
sdkresource "go.opentelemetry.io/otel/sdk/resource"
|
|
|
|
|
sdktrace "go.opentelemetry.io/otel/trace"
|
2025-09-01 17:10:13 +05:30
|
|
|
"go.uber.org/zap" //nolint:depguard
|
2024-08-21 14:18:44 +05:30
|
|
|
)
|
|
|
|
|
|
2025-01-17 14:54:33 +05:30
|
|
|
// Instrumentation provides the core components for application instrumentation.
|
|
|
|
|
type Instrumentation interface {
|
2025-01-24 14:53:02 +05:30
|
|
|
// Logger returns the Slog logger.
|
|
|
|
|
Logger() *slog.Logger
|
2025-01-17 14:54:33 +05:30
|
|
|
// MeterProvider returns the OpenTelemetry meter provider.
|
|
|
|
|
MeterProvider() sdkmetric.MeterProvider
|
|
|
|
|
// TracerProvider returns the OpenTelemetry tracer provider.
|
|
|
|
|
TracerProvider() sdktrace.TracerProvider
|
2025-01-24 14:53:02 +05:30
|
|
|
// PrometheusRegisterer returns the Prometheus registerer.
|
|
|
|
|
PrometheusRegisterer() prometheus.Registerer
|
2025-01-17 14:54:33 +05:30
|
|
|
// ToProviderSettings converts instrumentation to provider settings.
|
|
|
|
|
ToProviderSettings() factory.ProviderSettings
|
2024-08-21 14:18:44 +05:30
|
|
|
}
|
|
|
|
|
|
2025-09-01 17:10:13 +05:30
|
|
|
// conversion functions required for using zap interface with underlying slog provider
|
|
|
|
|
type ZapToSlogConverter interface {
|
|
|
|
|
FieldsToAttributes(fields []zap.Field) []any
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-17 14:54:33 +05:30
|
|
|
// Merges the input attributes with the resource attributes.
|
|
|
|
|
func mergeAttributes(input map[string]any, resource *sdkresource.Resource) map[string]any {
|
2024-08-21 14:18:44 +05:30
|
|
|
output := make(map[string]any)
|
|
|
|
|
|
|
|
|
|
for k, v := range input {
|
|
|
|
|
output[k] = v
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
kvs := resource.Attributes()
|
|
|
|
|
for _, kv := range kvs {
|
|
|
|
|
output[string(kv.Key)] = kv.Value
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return output
|
|
|
|
|
}
|