diff --git a/docs/generated/kuma-cp.md b/docs/generated/kuma-cp.md index 6da9a3b5849f..65e986798c74 100644 --- a/docs/generated/kuma-cp.md +++ b/docs/generated/kuma-cp.md @@ -700,4 +700,8 @@ proxy: # Sets the envoy runtime value to limit maximum number of incoming # connections to a builtin gateway data plane proxy globalDownstreamMaxConnections: 50000 # ENV: KUMA_PROXY_GATEWAY_GLOBAL_DOWNSTREAM_MAX_CONNECTIONS + +tracing: + openTelemetry: + endpoint: "" # e.g. otel-collector:4317 ``` diff --git a/pkg/api-server/server.go b/pkg/api-server/server.go index 655d11d54755..7fdb5f688f77 100644 --- a/pkg/api-server/server.go +++ b/pkg/api-server/server.go @@ -122,9 +122,7 @@ func NewApiServer( } container.Filter(cors.Filter) - if cfg.Tracing != nil { - container.Filter(otelrestful.OTelFilter("api-server")) - } + container.Filter(otelrestful.OTelFilter("api-server")) // We create a WebService and set up resources endpoints and index endpoint instead of creating WebService // for every resource like /meshes/{mesh}/traffic-permissions, /meshes/{mesh}/traffic-log etc. diff --git a/pkg/config/app/kuma-cp/config.go b/pkg/config/app/kuma-cp/config.go index 4212b5d9306b..7ff6d5df7f01 100644 --- a/pkg/config/app/kuma-cp/config.go +++ b/pkg/config/app/kuma-cp/config.go @@ -152,7 +152,7 @@ type Config struct { // Intercommunication CP configuration InterCp intercp.InterCpConfig `json:"interCp"` // Tracing - Tracing *tracing.Config `json:"tracing"` + Tracing tracing.Config `json:"tracing"` } func (c *Config) Sanitize() { @@ -290,6 +290,9 @@ func (c *Config) Validate() error { if err := c.InterCp.Validate(); err != nil { return errors.Wrap(err, "InterCp validation failed") } + if err := c.Tracing.Validate(); err != nil { + return errors.Wrap(err, "Tracing validation failed") + } return nil } diff --git a/pkg/config/app/kuma-cp/kuma-cp.defaults.yaml b/pkg/config/app/kuma-cp/kuma-cp.defaults.yaml index bbbff700228a..e9cbca54d359 100644 --- a/pkg/config/app/kuma-cp/kuma-cp.defaults.yaml +++ b/pkg/config/app/kuma-cp/kuma-cp.defaults.yaml @@ -697,3 +697,7 @@ proxy: # Sets the envoy runtime value to limit maximum number of incoming # connections to a builtin gateway data plane proxy globalDownstreamMaxConnections: 50000 # ENV: KUMA_PROXY_GATEWAY_GLOBAL_DOWNSTREAM_MAX_CONNECTIONS + +tracing: + openTelemetry: + endpoint: "" # e.g. otel-collector:4317 diff --git a/pkg/config/loader_test.go b/pkg/config/loader_test.go index 9c00005c6277..70d0b70e36e2 100644 --- a/pkg/config/loader_test.go +++ b/pkg/config/loader_test.go @@ -888,6 +888,7 @@ proxy: "KUMA_EXPERIMENTAL_USE_TAG_FIRST_VIRTUAL_OUTBOUND_MODEL": "false", "KUMA_EXPERIMENTAL_INGRESS_TAG_FILTERS": "kuma.io/service", "KUMA_PROXY_GATEWAY_GLOBAL_DOWNSTREAM_MAX_CONNECTIONS": "1", + "KUMA_TRACING_OPENTELEMETRY_ENDPOINT": "otel-collector:4317", }, yamlFileConfig: "", }), diff --git a/pkg/config/tracing/config.go b/pkg/config/tracing/config.go index ccf7b51a6ac1..14b0c9b169c6 100644 --- a/pkg/config/tracing/config.go +++ b/pkg/config/tracing/config.go @@ -1,11 +1,23 @@ package tracing type Config struct { - OpenTelemetry OpenTelemetry `json:"openTelemetry"` + OpenTelemetry OpenTelemetry `json:"openTelemetry,omitempty"` +} + +func (c Config) Validate() error { + if err := c.OpenTelemetry.Validate(); err != nil { + return err + } + + return nil } type OpenTelemetry struct { // Address of OpenTelemetry collector. // E.g. otel-collector:4317 - Endpoint string `json:"endpoint"` + Endpoint string `json:"endpoint,omitempty" envconfig:"kuma_tracing_opentelemetry_endpoint"` +} + +func (c OpenTelemetry) Validate() error { + return nil } diff --git a/pkg/plugins/runtime/opentelemetry/plugin.go b/pkg/plugins/runtime/opentelemetry/plugin.go index 0471700ec548..45c5781056e1 100644 --- a/pkg/plugins/runtime/opentelemetry/plugin.go +++ b/pkg/plugins/runtime/opentelemetry/plugin.go @@ -55,13 +55,13 @@ func (t *tracer) NeedLeaderElection() bool { } func (p *plugin) Customize(rt core_runtime.Runtime) error { - tracing := rt.Config().Tracing - if tracing == nil { + otel := rt.Config().Tracing.OpenTelemetry + if otel.Endpoint == "" { return nil } t := tracer{ - config: tracing.OpenTelemetry, + config: otel, } if err := rt.Add(component.NewResilientComponent(core.Log.WithName("otel-tracer"), &t)); err != nil { return err