add deployment env as attribute at the service level

This commit is contained in:
David Hontecillas
2025-04-17 15:16:24 +02:00
parent 831a582aef
commit 789939f006
3 changed files with 30 additions and 5 deletions
+1
View File
@@ -11,6 +11,7 @@ import (
type ConfigData struct { type ConfigData struct {
ServiceName string `json:"service_name"` ServiceName string `json:"service_name"`
ServiceVersion string `json:"service_version"` ServiceVersion string `json:"service_version"`
DeployEnv string `json:"deploy_env"`
Layers *LayersOpts `json:"layers"` Layers *LayersOpts `json:"layers"`
Exporters Exporters `json:"exporters"` Exporters Exporters `json:"exporters"`
SkipPaths []string `json:"skip_paths"` SkipPaths []string `json:"skip_paths"`
+13 -2
View File
@@ -56,7 +56,8 @@ func RegisterWithConfig(ctx context.Context, l logging.Logger, cfg *config.Confi
return shutdownFn, err return shutdownFn, err
} }
exporter.SetGlobalExporterInstances(me, te) exporter.SetGlobalExporterInstances(me, te)
shutdown, err := RegisterGlobalInstance(ctx, l, me, te, *cfg.MetricReportingPeriod, *cfg.TraceSampleRate, cfg.ServiceName, cfg.ServiceVersion) shutdown, err := RegisterGlobalInstanceWithEnv(ctx, l, me, te, *cfg.MetricReportingPeriod,
*cfg.TraceSampleRate, cfg.ServiceName, cfg.ServiceVersion, cfg.DeployEnv)
if err == nil { if err == nil {
state.SetGlobalConfig(state.NewConfig(cfg)) state.SetGlobalConfig(state.NewConfig(cfg))
} }
@@ -67,6 +68,16 @@ func RegisterWithConfig(ctx context.Context, l logging.Logger, cfg *config.Confi
func RegisterGlobalInstance(ctx context.Context, l logging.Logger, func RegisterGlobalInstance(ctx context.Context, l logging.Logger,
me map[string]exporter.MetricReader, te map[string]exporter.SpanExporter, me map[string]exporter.MetricReader, te map[string]exporter.SpanExporter,
metricReportingPeriod int, traceSampleRate float64, serviceName string, serviceVersion string, metricReportingPeriod int, traceSampleRate float64, serviceName string, serviceVersion string,
) (func(), error) {
return RegisterGlobalInstanceWithEnv(ctx, l, me, te, metricReportingPeriod,
traceSampleRate, serviceName, serviceVersion, "")
}
// RegisterGlobalInstanceWithEnv creates the instance that will be used to report metrics and traces
func RegisterGlobalInstanceWithEnv(ctx context.Context, l logging.Logger,
me map[string]exporter.MetricReader, te map[string]exporter.SpanExporter,
metricReportingPeriod int, traceSampleRate float64, serviceName string, serviceVersion string,
env string,
) (func(), error) { ) (func(), error) {
shutdownFn := func() {} shutdownFn := func() {}
prop := propagation.NewCompositeTextMapPropagator( prop := propagation.NewCompositeTextMapPropagator(
@@ -103,7 +114,7 @@ func RegisterGlobalInstance(ctx context.Context, l logging.Logger,
version = lcore.KrakendVersion version = lcore.KrakendVersion
} }
s, err := state.NewWithVersion(serviceName, globalStateCfg, version, me, te) s, err := state.NewWithVersionAndEnv(serviceName, globalStateCfg, version, env, me, te)
if err != nil { if err != nil {
return shutdownFn, err return shutdownFn, err
} }
+16 -3
View File
@@ -8,6 +8,7 @@ import (
"time" "time"
"go.opentelemetry.io/otel" "go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/metric"
noopmetric "go.opentelemetry.io/otel/metric/noop" noopmetric "go.opentelemetry.io/otel/metric/noop"
"go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/propagation"
@@ -64,10 +65,22 @@ type OTELState struct {
func NewWithVersion(serviceName string, cfg *OTELStateConfig, version string, func NewWithVersion(serviceName string, cfg *OTELStateConfig, version string,
me map[string]exporter.MetricReader, te map[string]exporter.SpanExporter, me map[string]exporter.MetricReader, te map[string]exporter.SpanExporter,
) (*OTELState, error) { ) (*OTELState, error) {
res := sdkresource.NewWithAttributes( return NewWithVersionAndEnv(serviceName, cfg, version, "", me, te)
semconv.SchemaURL, }
// NewWithVersionAndEnv create a new OTELState with a version for
// the KrakenD service, with the provided metrics and traces exporters
func NewWithVersionAndEnv(serviceName string, cfg *OTELStateConfig, version string,
env string, me map[string]exporter.MetricReader, te map[string]exporter.SpanExporter,
) (*OTELState, error) {
sdkAttrs := []attribute.KeyValue{
semconv.ServiceName(serviceName), semconv.ServiceName(serviceName),
semconv.ServiceVersion(version)) semconv.ServiceVersion(version),
}
if env != "" {
sdkAttrs = append(sdkAttrs, semconv.DeploymentEnvironment(env))
}
res := sdkresource.NewWithAttributes(semconv.SchemaURL, sdkAttrs...)
reportingPeriod := time.Duration(cfg.MetricReportingPeriod) * time.Second reportingPeriod := time.Duration(cfg.MetricReportingPeriod) * time.Second
metricOpts := make([]sdkmetric.Option, 0, len(cfg.MetricProviders)+2) metricOpts := make([]sdkmetric.Option, 0, len(cfg.MetricProviders)+2)