diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c794900d6..4eb553e061 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -83,6 +83,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - move `otelcol.deployment.nodeSelector` to `tracesGateway.deployment.nodeSelector` - move `otelcol.deployment.priorityClassName` to `tracesGateway.deployment.priorityClassName` - move `otelgateway.deployment.nodeSelector` to `tracesGateway.deployment.nodeSelector` +- feat: enable metrics and traces collection from instrumentation by default [#2154] + - change parameter `sumologic.traces.enabled` default value from `false` to `true` ### Changed @@ -111,6 +113,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - fix(cleanup): fix cleanup job [#2600] - fix(setup): add permission to modify secrets [#2653] +[#2154]: https://github.com/SumoLogic/sumologic-kubernetes-collection/pull/2154 [#2483]: https://github.com/SumoLogic/sumologic-kubernetes-collection/pull/2483 [#2512]: https://github.com/SumoLogic/sumologic-kubernetes-collection/pull/2512 [#2514]: https://github.com/SumoLogic/sumologic-kubernetes-collection/pull/2514 diff --git a/deploy/helm/sumologic/README.md b/deploy/helm/sumologic/README.md index ab583500c3..0234723062 100644 --- a/deploy/helm/sumologic/README.md +++ b/deploy/helm/sumologic/README.md @@ -86,7 +86,7 @@ The following table lists the configurable parameters of the Sumo Logic chart an | `sumologic.metrics.remoteWriteProxy.priorityClassName` | Priority class name for the remote write proxy deployment. | `Nil` | | `sumologic.metrics.remoteWriteProxy.podLabels` | Additional labels for the remote write proxy container. | `{}` | | `sumologic.metrics.remoteWriteProxy.podAnnotations` | Additional annotations for for the remote write proxy container. | `{}` | -| `sumologic.traces.enabled` | Set the enabled flag to true to enable tracing ingestion. _Tracing must be enabled for the account first. Please contact your Sumo representative for activation details_ | `false` | +| `sumologic.traces.enabled` | Set the enabled flag to true to enable tracing ingestion. _Tracing must be enabled for the account first. Please contact your Sumo representative for activation details_ | `true` | | `sumologic.envFromSecret` | If enabled, accessId and accessKey will be sourced from Secret Name given. Be sure to include at least the following env variables in your secret (1) SUMOLOGIC_ACCESSID, (2) SUMOLOGIC_ACCESSKEY | `sumo-api-secret` | | `sumologic.accessId` | Sumo access ID. | `Nil` | | `sumologic.accessKey` | Sumo access key. | `Nil` | diff --git a/deploy/helm/sumologic/values.yaml b/deploy/helm/sumologic/values.yaml index 2a3b2c6029..f52837f3e0 100644 --- a/deploy/helm/sumologic/values.yaml +++ b/deploy/helm/sumologic/values.yaml @@ -432,9 +432,9 @@ sumologic: podAnnotations: {} ### Traces configuration - ## Set the enabled flag to true to enable traces ingestion. + ## Set the enabled flag to false to disable traces ingestion. traces: - enabled: false + enabled: true ## How many spans per request should be send to receiver spans_per_request: 100 @@ -3322,7 +3322,7 @@ kube-prometheus-stack: ## Configure otelcol-instrumentation - Sumo OTel Distro Collector otelcolInstrumentation: - enabled: false + enabled: true sourceMetadata: ## Set the _sourceName metadata field in Sumo Logic. sourceName: "%{k8s.namespace.name}.%{k8s.pod.pod_name}.%{k8s.container.name}" @@ -3924,7 +3924,7 @@ metadata: ## Configure traces-gateway ## ref: docs/opentelemetry_collector.md#load-balancing-using-the-gateway tracesGateway: - enabled: false + enabled: true deployment: replicas: 1 nodeSelector: {} diff --git a/tests/helm/opentelemetry_operator_instrumentation_cr_configmap/static/instrumentation.input.yaml b/tests/helm/opentelemetry_operator_instrumentation_cr_configmap/static/instrumentation.input.yaml index a42feaf543..31b2de9215 100644 --- a/tests/helm/opentelemetry_operator_instrumentation_cr_configmap/static/instrumentation.input.yaml +++ b/tests/helm/opentelemetry_operator_instrumentation_cr_configmap/static/instrumentation.input.yaml @@ -1,7 +1,3 @@ -sumologic: - traces: - enabled: true - opentelemetry-operator: enabled: true createDefaultInstrumentation: true diff --git a/tests/helm/opentelemetry_operator_instrumentation_cr_job/static/job.input.yaml b/tests/helm/opentelemetry_operator_instrumentation_cr_job/static/job.input.yaml index cf2bd0d9a3..c7c757cdce 100644 --- a/tests/helm/opentelemetry_operator_instrumentation_cr_job/static/job.input.yaml +++ b/tests/helm/opentelemetry_operator_instrumentation_cr_job/static/job.input.yaml @@ -1,7 +1,3 @@ -sumologic: - traces: - enabled: true - opentelemetry-operator: enabled: true createDefaultInstrumentation: true diff --git a/tests/helm/otelcol-instrumentation-config/static/traces-gateway-disabled.input.yaml b/tests/helm/otelcol-instrumentation-config/static/traces-gateway-disabled.input.yaml index c97e21dceb..d43a2081a2 100644 --- a/tests/helm/otelcol-instrumentation-config/static/traces-gateway-disabled.input.yaml +++ b/tests/helm/otelcol-instrumentation-config/static/traces-gateway-disabled.input.yaml @@ -1,9 +1,4 @@ -sumologic: - traces: - enabled: true - otelcolInstrumentation: - enabled: true sourceMetadata: excludeNamespaceRegex: "kube\\s+" excludePodRegex: "^foo.*" diff --git a/tests/helm/otelcol-instrumentation-config/static/traces-gateway-enabled.input.yaml b/tests/helm/otelcol-instrumentation-config/static/traces-gateway-enabled.input.yaml index b9a8777496..9df046865a 100644 --- a/tests/helm/otelcol-instrumentation-config/static/traces-gateway-enabled.input.yaml +++ b/tests/helm/otelcol-instrumentation-config/static/traces-gateway-enabled.input.yaml @@ -1,15 +1,6 @@ -sumologic: - traces: - enabled: true - otelcolInstrumentation: - enabled: true sourceMetadata: excludeNamespaceRegex: "kube\\s+" excludePodRegex: "^foo.*" excludeContainerRegex: "[123+]bar$|xyz" excludeHostRegex: hhh123 - -tracesGateway: - enabled: true - diff --git a/tests/helm/otelcol-instrumentation-statefulset/static/otelcol-instrumentation-statefulset.input.yaml b/tests/helm/otelcol-instrumentation-statefulset/static/otelcol-instrumentation-statefulset.input.yaml index cb20c2e463..8b13789179 100644 --- a/tests/helm/otelcol-instrumentation-statefulset/static/otelcol-instrumentation-statefulset.input.yaml +++ b/tests/helm/otelcol-instrumentation-statefulset/static/otelcol-instrumentation-statefulset.input.yaml @@ -1,6 +1 @@ -sumologic: - traces: - enabled: true -otelcolInstrumentation: - enabled: true diff --git a/tests/helm/terraform/static/all_fields.output.yaml b/tests/helm/terraform/static/all_fields.output.yaml index 565cc7cc40..4addb57eb1 100644 --- a/tests/helm/terraform/static/all_fields.output.yaml +++ b/tests/helm/terraform/static/all_fields.output.yaml @@ -271,6 +271,7 @@ data: scheduler_metrics_source = "kube-scheduler-metrics" state_metrics_source = "kube-state-metrics" test_source_metrics_source = "(Test source)" + default_traces_source = "traces" } main.tf: | terraform { @@ -476,6 +477,12 @@ data: timezone = "local timezone" use_autoline_matching = false } + + resource "sumologic_http_source" "default_traces_source" { + name = local.default_traces_source + collector_id = sumologic_collector.collector.id + content_type = "Zipkin" + } resource "kubernetes_secret" "sumologic_collection_secret" { metadata { @@ -495,6 +502,7 @@ data: endpoint-metrics-kube-scheduler = sumologic_http_source.scheduler_metrics_source.url endpoint-metrics-kube-state = sumologic_http_source.state_metrics_source.url endpoint-test_source_metrics_source = sumologic_http_source.test_source_metrics_source.url + endpoint-traces = sumologic_http_source.default_traces_source.url } type = "Opaque" @@ -634,6 +642,7 @@ data: terraform import sumologic_http_source.scheduler_metrics_source "${COLLECTOR_NAME}/kube-scheduler-metrics" terraform import sumologic_http_source.state_metrics_source "${COLLECTOR_NAME}/kube-state-metrics" terraform import sumologic_http_source.test_source_metrics_source "${COLLECTOR_NAME}/(Test source)" + terraform import sumologic_http_source.default_traces_source "${COLLECTOR_NAME}/traces" fi # Kubernetes Secret diff --git a/tests/helm/terraform/static/collector_fields.output.yaml b/tests/helm/terraform/static/collector_fields.output.yaml index 6f98aa68d3..3a7f1b6b60 100644 --- a/tests/helm/terraform/static/collector_fields.output.yaml +++ b/tests/helm/terraform/static/collector_fields.output.yaml @@ -270,6 +270,7 @@ data: node_metrics_source = "node-exporter-metrics" scheduler_metrics_source = "kube-scheduler-metrics" state_metrics_source = "kube-state-metrics" + default_traces_source = "traces" } main.tf: | terraform { @@ -432,6 +433,12 @@ data: name = local.state_metrics_source collector_id = sumologic_collector.collector.id } + + resource "sumologic_http_source" "default_traces_source" { + name = local.default_traces_source + collector_id = sumologic_collector.collector.id + content_type = "Zipkin" + } resource "kubernetes_secret" "sumologic_collection_secret" { metadata { @@ -450,6 +457,7 @@ data: endpoint-metrics-node-exporter = sumologic_http_source.node_metrics_source.url endpoint-metrics-kube-scheduler = sumologic_http_source.scheduler_metrics_source.url endpoint-metrics-kube-state = sumologic_http_source.state_metrics_source.url + endpoint-traces = sumologic_http_source.default_traces_source.url } type = "Opaque" @@ -588,6 +596,7 @@ data: terraform import sumologic_http_source.node_metrics_source "${COLLECTOR_NAME}/node-exporter-metrics" terraform import sumologic_http_source.scheduler_metrics_source "${COLLECTOR_NAME}/kube-scheduler-metrics" terraform import sumologic_http_source.state_metrics_source "${COLLECTOR_NAME}/kube-state-metrics" + terraform import sumologic_http_source.default_traces_source "${COLLECTOR_NAME}/traces" fi # Kubernetes Secret diff --git a/tests/helm/terraform/static/default.output.yaml b/tests/helm/terraform/static/default.output.yaml index df585ecd7e..e5c2d97e9c 100644 --- a/tests/helm/terraform/static/default.output.yaml +++ b/tests/helm/terraform/static/default.output.yaml @@ -270,6 +270,7 @@ data: node_metrics_source = "node-exporter-metrics" scheduler_metrics_source = "kube-scheduler-metrics" state_metrics_source = "kube-state-metrics" + default_traces_source = "traces" } main.tf: | terraform { @@ -430,6 +431,12 @@ data: name = local.state_metrics_source collector_id = sumologic_collector.collector.id } + + resource "sumologic_http_source" "default_traces_source" { + name = local.default_traces_source + collector_id = sumologic_collector.collector.id + content_type = "Zipkin" + } resource "kubernetes_secret" "sumologic_collection_secret" { metadata { @@ -448,6 +455,7 @@ data: endpoint-metrics-node-exporter = sumologic_http_source.node_metrics_source.url endpoint-metrics-kube-scheduler = sumologic_http_source.scheduler_metrics_source.url endpoint-metrics-kube-state = sumologic_http_source.state_metrics_source.url + endpoint-traces = sumologic_http_source.default_traces_source.url } type = "Opaque" @@ -586,6 +594,7 @@ data: terraform import sumologic_http_source.node_metrics_source "${COLLECTOR_NAME}/node-exporter-metrics" terraform import sumologic_http_source.scheduler_metrics_source "${COLLECTOR_NAME}/kube-scheduler-metrics" terraform import sumologic_http_source.state_metrics_source "${COLLECTOR_NAME}/kube-state-metrics" + terraform import sumologic_http_source.default_traces_source "${COLLECTOR_NAME}/traces" fi # Kubernetes Secret diff --git a/tests/helm/terraform/static/disable_default_metrics.output.yaml b/tests/helm/terraform/static/disable_default_metrics.output.yaml index cc361dfa63..ce4ed93600 100644 --- a/tests/helm/terraform/static/disable_default_metrics.output.yaml +++ b/tests/helm/terraform/static/disable_default_metrics.output.yaml @@ -269,6 +269,7 @@ data: node_metrics_source = "node-exporter-metrics" scheduler_metrics_source = "kube-scheduler-metrics" state_metrics_source = "kube-state-metrics" + default_traces_source = "traces" } main.tf: | terraform { @@ -424,6 +425,12 @@ data: name = local.state_metrics_source collector_id = sumologic_collector.collector.id } + + resource "sumologic_http_source" "default_traces_source" { + name = local.default_traces_source + collector_id = sumologic_collector.collector.id + content_type = "Zipkin" + } resource "kubernetes_secret" "sumologic_collection_secret" { metadata { @@ -441,6 +448,7 @@ data: endpoint-metrics-node-exporter = sumologic_http_source.node_metrics_source.url endpoint-metrics-kube-scheduler = sumologic_http_source.scheduler_metrics_source.url endpoint-metrics-kube-state = sumologic_http_source.state_metrics_source.url + endpoint-traces = sumologic_http_source.default_traces_source.url } type = "Opaque" @@ -578,6 +586,7 @@ data: terraform import sumologic_http_source.node_metrics_source "${COLLECTOR_NAME}/node-exporter-metrics" terraform import sumologic_http_source.scheduler_metrics_source "${COLLECTOR_NAME}/kube-scheduler-metrics" terraform import sumologic_http_source.state_metrics_source "${COLLECTOR_NAME}/kube-state-metrics" + terraform import sumologic_http_source.default_traces_source "${COLLECTOR_NAME}/traces" fi # Kubernetes Secret diff --git a/tests/helm/terraform/static/disabled_dashboards.output.yaml b/tests/helm/terraform/static/disabled_dashboards.output.yaml index d2389f1ee8..aea3deebeb 100644 --- a/tests/helm/terraform/static/disabled_dashboards.output.yaml +++ b/tests/helm/terraform/static/disabled_dashboards.output.yaml @@ -270,6 +270,7 @@ data: node_metrics_source = "node-exporter-metrics" scheduler_metrics_source = "kube-scheduler-metrics" state_metrics_source = "kube-state-metrics" + default_traces_source = "traces" } main.tf: | terraform { @@ -430,6 +431,12 @@ data: name = local.state_metrics_source collector_id = sumologic_collector.collector.id } + + resource "sumologic_http_source" "default_traces_source" { + name = local.default_traces_source + collector_id = sumologic_collector.collector.id + content_type = "Zipkin" + } resource "kubernetes_secret" "sumologic_collection_secret" { metadata { @@ -448,6 +455,7 @@ data: endpoint-metrics-node-exporter = sumologic_http_source.node_metrics_source.url endpoint-metrics-kube-scheduler = sumologic_http_source.scheduler_metrics_source.url endpoint-metrics-kube-state = sumologic_http_source.state_metrics_source.url + endpoint-traces = sumologic_http_source.default_traces_source.url } type = "Opaque" @@ -586,6 +594,7 @@ data: terraform import sumologic_http_source.node_metrics_source "${COLLECTOR_NAME}/node-exporter-metrics" terraform import sumologic_http_source.scheduler_metrics_source "${COLLECTOR_NAME}/kube-scheduler-metrics" terraform import sumologic_http_source.state_metrics_source "${COLLECTOR_NAME}/kube-state-metrics" + terraform import sumologic_http_source.default_traces_source "${COLLECTOR_NAME}/traces" fi # Kubernetes Secret diff --git a/tests/helm/terraform/static/disabled_monitors.output.yaml b/tests/helm/terraform/static/disabled_monitors.output.yaml index 61e2db95d1..ec88ea608b 100644 --- a/tests/helm/terraform/static/disabled_monitors.output.yaml +++ b/tests/helm/terraform/static/disabled_monitors.output.yaml @@ -270,6 +270,7 @@ data: node_metrics_source = "node-exporter-metrics" scheduler_metrics_source = "kube-scheduler-metrics" state_metrics_source = "kube-state-metrics" + default_traces_source = "traces" } main.tf: | terraform { @@ -430,6 +431,12 @@ data: name = local.state_metrics_source collector_id = sumologic_collector.collector.id } + + resource "sumologic_http_source" "default_traces_source" { + name = local.default_traces_source + collector_id = sumologic_collector.collector.id + content_type = "Zipkin" + } resource "kubernetes_secret" "sumologic_collection_secret" { metadata { @@ -448,6 +455,7 @@ data: endpoint-metrics-node-exporter = sumologic_http_source.node_metrics_source.url endpoint-metrics-kube-scheduler = sumologic_http_source.scheduler_metrics_source.url endpoint-metrics-kube-state = sumologic_http_source.state_metrics_source.url + endpoint-traces = sumologic_http_source.default_traces_source.url } type = "Opaque" @@ -586,6 +594,7 @@ data: terraform import sumologic_http_source.node_metrics_source "${COLLECTOR_NAME}/node-exporter-metrics" terraform import sumologic_http_source.scheduler_metrics_source "${COLLECTOR_NAME}/kube-scheduler-metrics" terraform import sumologic_http_source.state_metrics_source "${COLLECTOR_NAME}/kube-state-metrics" + terraform import sumologic_http_source.default_traces_source "${COLLECTOR_NAME}/traces" fi # Kubernetes Secret diff --git a/tests/helm/terraform/static/monitors_with_email_notifications.output.yaml b/tests/helm/terraform/static/monitors_with_email_notifications.output.yaml index 7762fcba0a..3be78c1bd9 100644 --- a/tests/helm/terraform/static/monitors_with_email_notifications.output.yaml +++ b/tests/helm/terraform/static/monitors_with_email_notifications.output.yaml @@ -270,6 +270,7 @@ data: node_metrics_source = "node-exporter-metrics" scheduler_metrics_source = "kube-scheduler-metrics" state_metrics_source = "kube-state-metrics" + default_traces_source = "traces" } main.tf: | terraform { @@ -436,6 +437,12 @@ data: name = local.state_metrics_source collector_id = sumologic_collector.collector.id } + + resource "sumologic_http_source" "default_traces_source" { + name = local.default_traces_source + collector_id = sumologic_collector.collector.id + content_type = "Zipkin" + } resource "kubernetes_secret" "sumologic_collection_secret" { metadata { @@ -454,6 +461,7 @@ data: endpoint-metrics-node-exporter = sumologic_http_source.node_metrics_source.url endpoint-metrics-kube-scheduler = sumologic_http_source.scheduler_metrics_source.url endpoint-metrics-kube-state = sumologic_http_source.state_metrics_source.url + endpoint-traces = sumologic_http_source.default_traces_source.url } type = "Opaque" @@ -592,6 +600,7 @@ data: terraform import sumologic_http_source.node_metrics_source "${COLLECTOR_NAME}/node-exporter-metrics" terraform import sumologic_http_source.scheduler_metrics_source "${COLLECTOR_NAME}/kube-scheduler-metrics" terraform import sumologic_http_source.state_metrics_source "${COLLECTOR_NAME}/kube-state-metrics" + terraform import sumologic_http_source.default_traces_source "${COLLECTOR_NAME}/traces" fi # Kubernetes Secret diff --git a/tests/helm/terraform/static/monitors_with_single_email.output.yaml b/tests/helm/terraform/static/monitors_with_single_email.output.yaml index 5d9c8f3f68..d952f9c4f4 100644 --- a/tests/helm/terraform/static/monitors_with_single_email.output.yaml +++ b/tests/helm/terraform/static/monitors_with_single_email.output.yaml @@ -270,6 +270,7 @@ data: node_metrics_source = "node-exporter-metrics" scheduler_metrics_source = "kube-scheduler-metrics" state_metrics_source = "kube-state-metrics" + default_traces_source = "traces" } main.tf: | terraform { @@ -436,6 +437,12 @@ data: name = local.state_metrics_source collector_id = sumologic_collector.collector.id } + + resource "sumologic_http_source" "default_traces_source" { + name = local.default_traces_source + collector_id = sumologic_collector.collector.id + content_type = "Zipkin" + } resource "kubernetes_secret" "sumologic_collection_secret" { metadata { @@ -454,6 +461,7 @@ data: endpoint-metrics-node-exporter = sumologic_http_source.node_metrics_source.url endpoint-metrics-kube-scheduler = sumologic_http_source.scheduler_metrics_source.url endpoint-metrics-kube-state = sumologic_http_source.state_metrics_source.url + endpoint-traces = sumologic_http_source.default_traces_source.url } type = "Opaque" @@ -592,6 +600,7 @@ data: terraform import sumologic_http_source.node_metrics_source "${COLLECTOR_NAME}/node-exporter-metrics" terraform import sumologic_http_source.scheduler_metrics_source "${COLLECTOR_NAME}/kube-scheduler-metrics" terraform import sumologic_http_source.state_metrics_source "${COLLECTOR_NAME}/kube-state-metrics" + terraform import sumologic_http_source.default_traces_source "${COLLECTOR_NAME}/traces" fi # Kubernetes Secret diff --git a/tests/helm/terraform/static/strip_extrapolation.output.yaml b/tests/helm/terraform/static/strip_extrapolation.output.yaml index 7a89a55b5c..11c26add38 100644 --- a/tests/helm/terraform/static/strip_extrapolation.output.yaml +++ b/tests/helm/terraform/static/strip_extrapolation.output.yaml @@ -270,6 +270,7 @@ data: node_metrics_source = "node-exporter-metrics" scheduler_metrics_source = "kube-scheduler-metrics" state_metrics_source = "kube-state-metrics" + default_traces_source = "traces" } main.tf: | terraform { @@ -431,6 +432,12 @@ data: name = local.state_metrics_source collector_id = sumologic_collector.collector.id } + + resource "sumologic_http_source" "default_traces_source" { + name = local.default_traces_source + collector_id = sumologic_collector.collector.id + content_type = "Zipkin" + } resource "kubernetes_secret" "sumologic_collection_secret" { metadata { @@ -449,6 +456,7 @@ data: endpoint-metrics-node-exporter = sumologic_http_source.node_metrics_source.url endpoint-metrics-kube-scheduler = sumologic_http_source.scheduler_metrics_source.url endpoint-metrics-kube-state = sumologic_http_source.state_metrics_source.url + endpoint-traces = sumologic_http_source.default_traces_source.url } type = "Opaque" @@ -587,6 +595,7 @@ data: terraform import sumologic_http_source.node_metrics_source "${COLLECTOR_NAME}/node-exporter-metrics" terraform import sumologic_http_source.scheduler_metrics_source "${COLLECTOR_NAME}/kube-scheduler-metrics" terraform import sumologic_http_source.state_metrics_source "${COLLECTOR_NAME}/kube-state-metrics" + terraform import sumologic_http_source.default_traces_source "${COLLECTOR_NAME}/traces" fi # Kubernetes Secret diff --git a/tests/helm/terraform/static/tracing-metrics-disabled.output.yaml b/tests/helm/terraform/static/tracing-metrics-disabled.output.yaml index 5a99e0b9e4..534fa81298 100644 --- a/tests/helm/terraform/static/tracing-metrics-disabled.output.yaml +++ b/tests/helm/terraform/static/tracing-metrics-disabled.output.yaml @@ -270,6 +270,7 @@ data: node_metrics_source = "node-exporter-metrics" scheduler_metrics_source = "kube-scheduler-metrics" state_metrics_source = "kube-state-metrics" + default_traces_source = "traces" } main.tf: | terraform { @@ -430,6 +431,12 @@ data: name = local.state_metrics_source collector_id = sumologic_collector.collector.id } + + resource "sumologic_http_source" "default_traces_source" { + name = local.default_traces_source + collector_id = sumologic_collector.collector.id + content_type = "Zipkin" + } resource "kubernetes_secret" "sumologic_collection_secret" { metadata { @@ -448,6 +455,7 @@ data: endpoint-metrics-node-exporter = sumologic_http_source.node_metrics_source.url endpoint-metrics-kube-scheduler = sumologic_http_source.scheduler_metrics_source.url endpoint-metrics-kube-state = sumologic_http_source.state_metrics_source.url + endpoint-traces = sumologic_http_source.default_traces_source.url } type = "Opaque" @@ -586,6 +594,7 @@ data: terraform import sumologic_http_source.node_metrics_source "${COLLECTOR_NAME}/node-exporter-metrics" terraform import sumologic_http_source.scheduler_metrics_source "${COLLECTOR_NAME}/kube-scheduler-metrics" terraform import sumologic_http_source.state_metrics_source "${COLLECTOR_NAME}/kube-state-metrics" + terraform import sumologic_http_source.default_traces_source "${COLLECTOR_NAME}/traces" fi # Kubernetes Secret diff --git a/tests/helm/traces-gateway-loadbalancing/static/traces-gateway-true.input.yaml b/tests/helm/traces-gateway-loadbalancing/static/traces-gateway-true.input.yaml index d591ab0bb7..e69de29bb2 100644 --- a/tests/helm/traces-gateway-loadbalancing/static/traces-gateway-true.input.yaml +++ b/tests/helm/traces-gateway-loadbalancing/static/traces-gateway-true.input.yaml @@ -1,9 +0,0 @@ -sumologic: - traces: - enabled: true - -otelcolInstrumentation: - enabled: true - -tracesGateway: - enabled: true diff --git a/tests/helm/traces-sampler/static/simple.input.yaml b/tests/helm/traces-sampler/static/simple.input.yaml index 8f19cd422c..e69de29bb2 100644 --- a/tests/helm/traces-sampler/static/simple.input.yaml +++ b/tests/helm/traces-sampler/static/simple.input.yaml @@ -1,3 +0,0 @@ -sumologic: - traces: - enabled: true diff --git a/tests/integration/helm_fluentbit_containerd_multiline_logs_test.go b/tests/integration/helm_fluentbit_containerd_multiline_logs_test.go index af31daece8..c202cb6853 100644 --- a/tests/integration/helm_fluentbit_containerd_multiline_logs_test.go +++ b/tests/integration/helm_fluentbit_containerd_multiline_logs_test.go @@ -34,7 +34,7 @@ func Test_Helm_FluentBit_Containerd_Multiline_Logs(t *testing.T) { func(ctx context.Context, t *testing.T, envConf *envconf.Config) context.Context { k8s.WaitUntilSecretAvailable(t, ctxopts.KubectlOptions(ctx), "sumologic", 60, tickDuration) secret := k8s.GetSecret(t, ctxopts.KubectlOptions(ctx), "sumologic") - require.Len(t, secret.Data, 10, "Secret has incorrect number of endpoints") + require.Len(t, secret.Data, 11, "Secret has incorrect number of endpoints") return ctx }). Assess("otelcol logs statefulset is ready", diff --git a/tests/integration/helm_fluentbit_fluentd_test.go b/tests/integration/helm_fluentbit_fluentd_test.go index 8884e86a00..b02e1f2565 100644 --- a/tests/integration/helm_fluentbit_fluentd_test.go +++ b/tests/integration/helm_fluentbit_fluentd_test.go @@ -41,7 +41,7 @@ func Test_Helm_FluentBit_Fluentd(t *testing.T) { func(ctx context.Context, t *testing.T, envConf *envconf.Config) context.Context { k8s.WaitUntilSecretAvailable(t, ctxopts.KubectlOptions(ctx), "sumologic", 60, tickDuration) secret := k8s.GetSecret(t, ctxopts.KubectlOptions(ctx), "sumologic") - require.Len(t, secret.Data, 10, "Secret has incorrect number of endpoints") + require.Len(t, secret.Data, 11, "Secret has incorrect number of endpoints") return ctx }). Assess("fluentd logs statefulset is ready", diff --git a/tests/integration/helm_opentelemetry_operator_enabled_test.go b/tests/integration/helm_opentelemetry_operator_enabled_test.go index ff8da91eb8..dc8ab49777 100644 --- a/tests/integration/helm_opentelemetry_operator_enabled_test.go +++ b/tests/integration/helm_opentelemetry_operator_enabled_test.go @@ -10,17 +10,16 @@ import ( appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" "k8s.io/client-go/kubernetes/scheme" - "sigs.k8s.io/e2e-framework/klient/k8s" "sigs.k8s.io/e2e-framework/klient/k8s/resources" "sigs.k8s.io/e2e-framework/klient/wait" "sigs.k8s.io/e2e-framework/klient/wait/conditions" "sigs.k8s.io/e2e-framework/pkg/envconf" "sigs.k8s.io/e2e-framework/pkg/features" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/SumoLogic/sumologic-kubernetes-collection/tests/integration/internal/ctxopts" + "github.com/SumoLogic/sumologic-kubernetes-collection/tests/integration/internal/stepfuncs" ) func Test_Helm_OpenTelemetry_Operator_Enabled(t *testing.T) { @@ -36,67 +35,49 @@ func Test_Helm_OpenTelemetry_Operator_Enabled(t *testing.T) { } featTraces := features.New("traces"). - // TODO: Rewrite into similar step func as WaitUntilStatefulSetIsReady but for deployments - Assess("traces-sampler deployment is ready", func(ctx context.Context, t *testing.T, envConf *envconf.Config) context.Context { - res := envConf.Client().Resources(ctxopts.Namespace(ctx)) - releaseName := ctxopts.HelmRelease(ctx) - labelSelector := fmt.Sprintf("app=%s-sumologic-traces-sampler", releaseName) - ds := appsv1.DeploymentList{} - - require.NoError(t, - wait.For( - conditions.New(res). - ResourceListN(&ds, 1, - resources.WithLabelSelector(labelSelector), - ), - wait.WithTimeout(waitDuration), - wait.WithInterval(tickDuration), + Assess("traces-sampler deployment is ready", + stepfuncs.WaitUntilDeploymentIsReady( + waitDuration, + tickDuration, + stepfuncs.WithNameF( + stepfuncs.ReleaseFormatter("%s-sumologic-traces-sampler"), ), - ) - require.NoError(t, - wait.For( - conditions.New(res). - DeploymentConditionMatch(&ds.Items[0], appsv1.DeploymentAvailable, corev1.ConditionTrue), - wait.WithTimeout(waitDuration), - wait.WithInterval(tickDuration), + stepfuncs.WithLabelsF(stepfuncs.LabelFormatterKV{ + K: "app", + V: stepfuncs.ReleaseFormatter("%s-sumologic-traces-sampler"), + }, ), - ) - return ctx - }). - Assess("otelcol-instrumentation statefulset is ready", func(ctx context.Context, t *testing.T, envConf *envconf.Config) context.Context { - res := envConf.Client().Resources(ctxopts.Namespace(ctx)) - nl := corev1.NodeList{} - if !assert.NoError(t, res.List(ctx, &nl)) { - return ctx - } - - releaseName := ctxopts.HelmRelease(ctx) - labelSelector := fmt.Sprintf("app=%s-sumologic-otelcol-instrumentation", releaseName) - ds := appsv1.StatefulSetList{} - - require.NoError(t, - wait.For( - conditions.New(res). - ResourceListN(&ds, 1, - resources.WithLabelSelector(labelSelector), - ), - wait.WithTimeout(waitDuration), - wait.WithInterval(tickDuration), + ), + ). + Assess("otelcol-instrumentation statefulset is ready", + stepfuncs.WaitUntilStatefulSetIsReady( + waitDuration, + tickDuration, + stepfuncs.WithNameF( + stepfuncs.ReleaseFormatter("%s-sumologic-otelcol-instrumentation"), ), - ) - require.NoError(t, - wait.For( - conditions.New(res). - ResourceMatch(&ds.Items[0], func(object k8s.Object) bool { - s := object.(*appsv1.StatefulSet) - return s.Status.Replicas == s.Status.ReadyReplicas - }), - wait.WithTimeout(waitDuration), - wait.WithInterval(tickDuration), + stepfuncs.WithLabelsF( + stepfuncs.LabelFormatterKV{ + K: "app", + V: stepfuncs.ReleaseFormatter("%s-sumologic-otelcol-instrumentation"), + }, ), - ) - return ctx - }). + ), + ). + Assess("traces-gateway deployment is ready", + stepfuncs.WaitUntilDeploymentIsReady( + waitDuration, + tickDuration, + stepfuncs.WithNameF( + stepfuncs.ReleaseFormatter("%s-sumologic-traces-gateway"), + ), + stepfuncs.WithLabelsF(stepfuncs.LabelFormatterKV{ + K: "app", + V: stepfuncs.ReleaseFormatter("%s-sumologic-traces-gateway"), + }, + ), + ), + ). Feature() featOpenTelemetryOperator := features.New("opentelemetry-operator"). diff --git a/tests/integration/helm_otc_fips_metadata_installation_test.go b/tests/integration/helm_otc_fips_metadata_installation_test.go index 571197fe9d..19d3e76f3b 100644 --- a/tests/integration/helm_otc_fips_metadata_installation_test.go +++ b/tests/integration/helm_otc_fips_metadata_installation_test.go @@ -41,7 +41,7 @@ func Test_Helm_Default_OT_FIPS_Metadata(t *testing.T) { func(ctx context.Context, t *testing.T, envConf *envconf.Config) context.Context { terrak8s.WaitUntilSecretAvailable(t, ctxopts.KubectlOptions(ctx), "sumologic", 60, tickDuration) secret := terrak8s.GetSecret(t, ctxopts.KubectlOptions(ctx), "sumologic") - require.Len(t, secret.Data, 10) + require.Len(t, secret.Data, 11, "Secret has incorrect number of endpoints") return ctx }). Assess("otelcol logs statefulset is ready", diff --git a/tests/integration/helm_otc_metadata_installation_test.go b/tests/integration/helm_otc_metadata_installation_test.go index c721d27320..b9b1581c28 100644 --- a/tests/integration/helm_otc_metadata_installation_test.go +++ b/tests/integration/helm_otc_metadata_installation_test.go @@ -41,7 +41,7 @@ func Test_Helm_Default_OT_Metadata(t *testing.T) { func(ctx context.Context, t *testing.T, envConf *envconf.Config) context.Context { terrak8s.WaitUntilSecretAvailable(t, ctxopts.KubectlOptions(ctx), "sumologic", 60, tickDuration) secret := terrak8s.GetSecret(t, ctxopts.KubectlOptions(ctx), "sumologic") - require.Len(t, secret.Data, 10, "Secret has incorrect number of endpoints") + require.Len(t, secret.Data, 11, "Secret has incorrect number of endpoints") return ctx }). Assess("otelcol logs statefulset is ready", diff --git a/tests/integration/helm_traces_enabled_test.go b/tests/integration/helm_traces_enabled_test.go index b4ced5a995..9aa1b01a76 100644 --- a/tests/integration/helm_traces_enabled_test.go +++ b/tests/integration/helm_traces_enabled_test.go @@ -6,13 +6,7 @@ import ( "testing" "time" - appsv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "sigs.k8s.io/e2e-framework/klient/k8s" - "sigs.k8s.io/e2e-framework/klient/k8s/resources" - "sigs.k8s.io/e2e-framework/klient/wait" - "sigs.k8s.io/e2e-framework/klient/wait/conditions" "sigs.k8s.io/e2e-framework/pkg/envconf" "sigs.k8s.io/e2e-framework/pkg/features" @@ -118,94 +112,47 @@ func Test_Helm_Traces_Enabled(t *testing.T) { }, waitDuration, tickDuration) return ctx }). - // TODO: Rewrite into similar step func as WaitUntilStatefulSetIsReady but for deployments - Assess("traces-sampler deployment is ready", func(ctx context.Context, t *testing.T, envConf *envconf.Config) context.Context { - res := envConf.Client().Resources(ctxopts.Namespace(ctx)) - releaseName := ctxopts.HelmRelease(ctx) - labelSelector := fmt.Sprintf("app=%s-sumologic-traces-sampler", releaseName) - ds := appsv1.DeploymentList{} - - require.NoError(t, - wait.For( - conditions.New(res). - ResourceListN(&ds, 1, - resources.WithLabelSelector(labelSelector), - ), - wait.WithTimeout(waitDuration), - wait.WithInterval(tickDuration), + Assess("traces-sampler deployment is ready", + stepfuncs.WaitUntilDeploymentIsReady( + waitDuration, + tickDuration, + stepfuncs.WithNameF( + stepfuncs.ReleaseFormatter("%s-sumologic-traces-gateway"), ), - ) - require.NoError(t, - wait.For( - conditions.New(res). - DeploymentConditionMatch(&ds.Items[0], appsv1.DeploymentAvailable, corev1.ConditionTrue), - wait.WithTimeout(waitDuration), - wait.WithInterval(tickDuration), + stepfuncs.WithLabelsF(stepfuncs.LabelFormatterKV{ + K: "app", + V: stepfuncs.ReleaseFormatter("%s-sumologic-traces-gateway"), + }, ), - ) - return ctx - }). - // TODO: Rewrite into similar step func as WaitUntilStatefulSetIsReady but for daemonsets - Assess("otelcol-instrumentation statefulset is ready", func(ctx context.Context, t *testing.T, envConf *envconf.Config) context.Context { - res := envConf.Client().Resources(ctxopts.Namespace(ctx)) - nl := corev1.NodeList{} - if !assert.NoError(t, res.List(ctx, &nl)) { - return ctx - } - - releaseName := ctxopts.HelmRelease(ctx) - labelSelector := fmt.Sprintf("app=%s-sumologic-otelcol-instrumentation", releaseName) - ds := appsv1.StatefulSetList{} - - require.NoError(t, - wait.For( - conditions.New(res). - ResourceListN(&ds, 1, - resources.WithLabelSelector(labelSelector), - ), - wait.WithTimeout(waitDuration), - wait.WithInterval(tickDuration), + )). + Assess("otelcol-instrumentation statefulset is ready", + stepfuncs.WaitUntilStatefulSetIsReady( + waitDuration, + tickDuration, + stepfuncs.WithNameF( + stepfuncs.ReleaseFormatter("%s-sumologic-otelcol-instrumentation"), ), - ) - require.NoError(t, - wait.For( - conditions.New(res). - ResourceMatch(&ds.Items[0], func(object k8s.Object) bool { - s := object.(*appsv1.StatefulSet) - return s.Status.Replicas == s.Status.ReadyReplicas - }), - wait.WithTimeout(waitDuration), - wait.WithInterval(tickDuration), + stepfuncs.WithLabelsF( + stepfuncs.LabelFormatterKV{ + K: "app", + V: stepfuncs.ReleaseFormatter("%s-sumologic-otelcol-instrumentation"), + }, ), - ) - return ctx - }). - Assess("traces-gateway deployment is ready", func(ctx context.Context, t *testing.T, envConf *envconf.Config) context.Context { - res := envConf.Client().Resources(ctxopts.Namespace(ctx)) - releaseName := ctxopts.HelmRelease(ctx) - labelSelector := fmt.Sprintf("app=%s-sumologic-traces-gateway", releaseName) - ds := appsv1.DeploymentList{} - - require.NoError(t, - wait.For( - conditions.New(res). - ResourceListN(&ds, 1, - resources.WithLabelSelector(labelSelector), - ), - wait.WithTimeout(waitDuration), - wait.WithInterval(tickDuration), + ), + ). + Assess("traces-gateway deployment is ready", + stepfuncs.WaitUntilDeploymentIsReady( + waitDuration, + tickDuration, + stepfuncs.WithNameF( + stepfuncs.ReleaseFormatter("%s-sumologic-traces-gateway"), ), - ) - require.NoError(t, - wait.For( - conditions.New(res). - DeploymentConditionMatch(&ds.Items[0], appsv1.DeploymentAvailable, corev1.ConditionTrue), - wait.WithTimeout(waitDuration), - wait.WithInterval(tickDuration), + stepfuncs.WithLabelsF(stepfuncs.LabelFormatterKV{ + K: "app", + V: stepfuncs.ReleaseFormatter("%s-sumologic-traces-gateway"), + }, ), - ) - return ctx - }). + )). Feature() featTraces := features.New("traces"). diff --git a/tests/integration/internal/stepfuncs/assess_funcs.go b/tests/integration/internal/stepfuncs/assess_funcs.go index 045aea6f42..0ea80e8550 100644 --- a/tests/integration/internal/stepfuncs/assess_funcs.go +++ b/tests/integration/internal/stepfuncs/assess_funcs.go @@ -336,3 +336,54 @@ func WaitUntilDaemonSetIsReady( return ctx } } + +// WaitUntilDeploymentIsReady waits for a specified duration and checks with the +// specified tick interval whether the deployment (as described by the provided options) +// is ready. +// +// Readiness for a deployment is defined as having Status.NumberUnavailable == 0. +func WaitUntilDeploymentIsReady( + waitDuration time.Duration, + tickDuration time.Duration, + opts ...Option, +) features.Func { + return func(ctx context.Context, t *testing.T, envConf *envconf.Config) context.Context { + deps := appsv1.Deployment{ + ObjectMeta: v1.ObjectMeta{ + Namespace: ctxopts.Namespace(ctx), + }, + } + + listOpts := []resources.ListOption{} + for _, opt := range opts { + opt.Apply(ctx, &deps) + listOpts = append(listOpts, opt.GetListOption(ctx)) + } + + res := envConf.Client().Resources(ctxopts.Namespace(ctx)) + cond := conditions. + New(res). + ResourceListMatchN(&appsv1.DeploymentList{Items: []appsv1.Deployment{deps}}, + 1, + func(obj k8s.Object) bool { + dep := obj.(*appsv1.Deployment) + log.V(5).InfoS("Deployment", "status", dep.Status) + if dep.Status.UnavailableReplicas != 0 { + log.V(0).Infof("Deployment %q not yet fully ready", dep.Name) + return false + } + return true + }, + listOpts..., + ) + + require.NoError(t, + wait.For(cond, + wait.WithTimeout(waitDuration), + wait.WithInterval(tickDuration), + ), + ) + + return ctx + } +} diff --git a/tests/integration/values/values_helm_default_otelcol_logs.yaml b/tests/integration/values/values_helm_default_otelcol_logs.yaml index 31fe065896..0fc48a14ed 100644 --- a/tests/integration/values/values_helm_default_otelcol_logs.yaml +++ b/tests/integration/values/values_helm_default_otelcol_logs.yaml @@ -12,6 +12,9 @@ sumologic: events: enabled: false + traces: + enabled: false + # We're using otelcol instead fluent-bit: enabled: false diff --git a/tests/integration/values/values_helm_opentelemetry_operator_enabled.yaml b/tests/integration/values/values_helm_opentelemetry_operator_enabled.yaml index 3c9f4d050c..830d7dae11 100644 --- a/tests/integration/values/values_helm_opentelemetry_operator_enabled.yaml +++ b/tests/integration/values/values_helm_opentelemetry_operator_enabled.yaml @@ -6,8 +6,6 @@ sumologic: enabled: false metrics: enabled: true - traces: - enabled: true opentelemetry-operator: enabled: true diff --git a/tests/integration/values/values_helm_otelcol_events.yaml b/tests/integration/values/values_helm_otelcol_events.yaml index 878ca128ba..74c77fd143 100644 --- a/tests/integration/values/values_helm_otelcol_events.yaml +++ b/tests/integration/values/values_helm_otelcol_events.yaml @@ -5,6 +5,8 @@ sumologic: enabled: false metrics: enabled: false + traces: + enabled: false otelevents: config: diff --git a/tests/integration/values/values_helm_traces_enabled.yaml b/tests/integration/values/values_helm_traces_enabled.yaml index 42983f03c0..6fb1ef25da 100644 --- a/tests/integration/values/values_helm_traces_enabled.yaml +++ b/tests/integration/values/values_helm_traces_enabled.yaml @@ -1,6 +1,4 @@ sumologic: - traces: - enabled: true metrics: enabled: true logs: @@ -23,12 +21,6 @@ otelcol: statefulset: replicaCount: 1 -otelcolInstrumentation: - enabled: true - -tracesGateway: - enabled: true - tracesSampler: config: # Default otlp pipeline from values.yaml is used.