diff --git a/.changelog/3544.changed.txt b/.changelog/3544.changed.txt new file mode 100644 index 0000000000..0c259ddd86 --- /dev/null +++ b/.changelog/3544.changed.txt @@ -0,0 +1 @@ +feat(sumologic-mock): add full support to instrumentation \ No newline at end of file diff --git a/deploy/helm/sumologic/README.md b/deploy/helm/sumologic/README.md index 84e6dea831..af7c164208 100644 --- a/deploy/helm/sumologic/README.md +++ b/deploy/helm/sumologic/README.md @@ -478,6 +478,7 @@ The following table lists the configurable parameters of the Sumo Logic chart an | `debug.instrumentation.otelcolInstrumentation.stopLogsIngestion` | Set to `true` to prevent sending otelcol-instrumentation collector logs to Sumo Logic. It prevents increasing ingestion and costs in case of huge amount of otelcol-instrumentation logs. | `false` | | `debug.instrumentation.tracesGateway.print` | Set to `true` to print logs processed by otelcol-instrumentation on standard output. | `false` | | `debug.instrumentation.tracesGateway.stopLogsIngestion` | Set to `true` to prevent sending traces-gateway logs to Sumo Logic. It prevents increasing ingestion and costs in case of huge amount of traces-gateway logs. | `false` | +| `debug.instrumentation.tracesSampler.forwardToSumologicMock` | Set to `true` to forward spans processed by traces-sampler also to Sumo Logic Mock. | `false` | | `debug.instrumentation.tracesSampler.print` | Set to `true` to print logs processed by traces-gateway on standard output. | `false` | | `debug.instrumentation.tracesSampler.stopLogsIngestion` | Set to `true` to prevent sending log collector logs to Sumo Logic. It prevents increasing ingestion and costs in case of huge amount of traces-sampler logs. | `false` | | `debug.logs.collector.print` | Set to `true` to print logs processed by log collector on standard output. | `false` | diff --git a/deploy/helm/sumologic/conf/instrumentation/otelcol.instrumentation.conf.yaml b/deploy/helm/sumologic/conf/instrumentation/otelcol.instrumentation.conf.yaml index 3df3d3e5a2..64b4fe620a 100644 --- a/deploy/helm/sumologic/conf/instrumentation/otelcol.instrumentation.conf.yaml +++ b/deploy/helm/sumologic/conf/instrumentation/otelcol.instrumentation.conf.yaml @@ -184,15 +184,23 @@ service: traces: receivers: [jaeger, opencensus, otlp, otlp/deprecated, zipkin] processors: [memory_limiter, k8s_tagger, source, resource, batch] + exporters: {{- if eq .Values.tracesGateway.enabled true }} - exporters: [otlphttp/traces] + - otlphttp/traces {{- else }} - exporters: [loadbalancing] + - loadbalancing {{- end}} +{{- if eq .Values.debug.instrumentation.otelcolInstrumentation.print true }} + - debug +{{- end }} metrics: receivers: [otlp, otlp/deprecated] processors: [memory_limiter, k8s_tagger, source, resource, batch] - exporters: [sumologic/metrics] + exporters: + - sumologic/metrics +{{- if eq .Values.debug.instrumentation.otelcolInstrumentation.print true }} + - debug +{{- end }} telemetry: logs: level: {{ .Values.otelcolInstrumentation.logLevel }} diff --git a/deploy/helm/sumologic/conf/instrumentation/traces.gateway.conf.yaml b/deploy/helm/sumologic/conf/instrumentation/traces.gateway.conf.yaml index 6776a7d68e..fb11305701 100644 --- a/deploy/helm/sumologic/conf/instrumentation/traces.gateway.conf.yaml +++ b/deploy/helm/sumologic/conf/instrumentation/traces.gateway.conf.yaml @@ -67,7 +67,11 @@ service: traces: receivers: [otlp] processors: [memory_limiter, batch] - exporters: [loadbalancing] + exporters: + - loadbalancing +{{- if eq .Values.debug.instrumentation.tracesGateway.print true }} + - debug +{{- end }} telemetry: logs: level: {{ .Values.tracesGateway.logLevel }} diff --git a/deploy/helm/sumologic/conf/instrumentation/traces.sampler.conf.yaml b/deploy/helm/sumologic/conf/instrumentation/traces.sampler.conf.yaml index 4e46a6da1f..39829dc10b 100644 --- a/deploy/helm/sumologic/conf/instrumentation/traces.sampler.conf.yaml +++ b/deploy/helm/sumologic/conf/instrumentation/traces.sampler.conf.yaml @@ -4,6 +4,17 @@ exporters: debug: verbosity: detailed {{- end }} + +{{- if eq (include "sumologic-mock.forward-instrumentation" .) "true" }} + otlphttp/sumologic-mock: +{{- if eq .Values.sumologic.traces.sourceType "http" }} + traces_endpoint: {{ include "sumologic-mock.receiver-endpoint" . }} +{{- else }} + endpoint: {{ include "sumologic-mock.receiver-endpoint" . }} +{{- end }} + compression: gzip +{{- end }} + ## Following generates verbose logs with span content, useful to verify what ## metadata is being tagged. To enable, uncomment and add "logging" to exporters below. ## There are two levels that could be used: `debug` and `info` with the former @@ -69,7 +80,14 @@ service: traces: receivers: [otlp] processors: [memory_limiter, cascading_filter, batch] - exporters: [otlphttp] + exporters: + - otlphttp +{{- if eq (include "sumologic-mock.forward-instrumentation" .) "true" }} + - otlphttp/sumologic-mock +{{- end }} +{{- if eq .Values.debug.instrumentation.tracesSampler.print true }} + - debug +{{- end }} telemetry: logs: level: {{ .Values.tracesSampler.logLevel }} diff --git a/deploy/helm/sumologic/templates/_helpers/_sumologic_mock.tpl b/deploy/helm/sumologic/templates/_helpers/_sumologic_mock.tpl index 523f5debd7..d01a7ccbd1 100644 --- a/deploy/helm/sumologic/templates/_helpers/_sumologic_mock.tpl +++ b/deploy/helm/sumologic/templates/_helpers/_sumologic_mock.tpl @@ -67,6 +67,12 @@ true {{- end -}} {{- end -}} +{{- define "sumologic-mock.forward-instrumentation"}} +{{- if and (eq .Values.debug.sumologicMock.enabled true) (eq .Values.debug.instrumentation.tracesSampler.forwardToSumologicMock true) -}} +true +{{- end -}} +{{- end -}} + {{- define "sumologic-mock.hostname" -}} {{ template "sumologic.sumologic-mock.name.service" . }}.{{ template "sumologic.namespace" . }} {{- end -}} diff --git a/deploy/helm/sumologic/values.yaml b/deploy/helm/sumologic/values.yaml index d0575efb67..3f80d67ed4 100644 --- a/deploy/helm/sumologic/values.yaml +++ b/deploy/helm/sumologic/values.yaml @@ -2389,6 +2389,7 @@ debug: tracesSampler: print: false stopLogsIngestion: false + forwardToSumologicMock: false events: print: false diff --git a/tests/helm/testdata/goldenfile/otelcol-instrumentation-config/traces-gateway-disabled.sumologic-mock.input.yaml b/tests/helm/testdata/goldenfile/otelcol-instrumentation-config/traces-gateway-disabled.sumologic-mock.input.yaml new file mode 100644 index 0000000000..07c63c8a0f --- /dev/null +++ b/tests/helm/testdata/goldenfile/otelcol-instrumentation-config/traces-gateway-disabled.sumologic-mock.input.yaml @@ -0,0 +1,14 @@ +otelcolInstrumentation: + sourceMetadata: + excludeNamespaceRegex: "kube\\s+" + excludePodRegex: "^foo.*" + excludeContainerRegex: "[123+]bar$|xyz" + excludeHostRegex: hhh123 + +tracesGateway: + enabled: false + +debug: + instrumentation: + otelcolInstrumentation: + print: true diff --git a/tests/helm/testdata/goldenfile/otelcol-instrumentation-config/traces-gateway-disabled.sumologic-mock.output.yaml b/tests/helm/testdata/goldenfile/otelcol-instrumentation-config/traces-gateway-disabled.sumologic-mock.output.yaml new file mode 100644 index 0000000000..d72c186905 --- /dev/null +++ b/tests/helm/testdata/goldenfile/otelcol-instrumentation-config/traces-gateway-disabled.sumologic-mock.output.yaml @@ -0,0 +1,177 @@ +--- +# Source: sumologic/templates/instrumentation/otelcol-instrumentation/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: RELEASE-NAME-sumologic-otelcol-instrumentation + namespace: sumologic + labels: + app: RELEASE-NAME-sumologic-otelcol-instrumentation + chart: "sumologic-%CURRENT_CHART_VERSION%" + release: "RELEASE-NAME" + heritage: "Helm" +data: + otelcol.instrumentation.conf.yaml: | + exporters: + debug: + verbosity: detailed + loadbalancing: + protocol: + otlp: + sending_queue: + enabled: true + num_consumers: 10 + queue_size: 10000 + timeout: 10s + tls: + insecure: true + resolver: + dns: + hostname: RELEASE-NAME-sumologic-traces-sampler-headless.sumologic + port: 4317 + sumologic/metrics: + client: k8s_%CURRENT_CHART_VERSION% + compress_encoding: gzip + endpoint: ${SUMO_ENDPOINT_DEFAULT_METRICS_SOURCE} + log_format: text + max_request_body_size: 1048576 + metric_format: prometheus + retry_on_failure: + enabled: true + initial_interval: 5s + max_elapsed_time: 120s + max_interval: 30s + sending_queue: + enabled: false + num_consumers: 10 + queue_size: 5000 + timeout: 5s + extensions: + health_check: {} + memory_ballast: + size_mib: 512 + pprof: {} + processors: + batch: + send_batch_max_size: 512 + send_batch_size: 256 + timeout: 5s + k8s_tagger: + extract: + annotations: + - key: '*' + tag_name: k8s.pod.annotation.%s + labels: + - key: '*' + tag_name: k8s.pod.label.%s + metadata: + - containerId + - containerName + - daemonSetName + - deploymentName + - hostName + - namespace + - nodeName + - podId + - podName + - replicaSetName + - serviceName + - statefulSetName + namespace_labels: + - key: '*' + tag_name: k8s.namespace.label.%s + owner_lookup_enabled: true + passthrough: false + memory_limiter: + check_interval: 5s + limit_percentage: 75 + spike_limit_percentage: 20 + resource: + attributes: + - action: upsert + key: k8s.cluster.name + value: kubernetes + resourcedetection: + detectors: + - system + override: false + timeout: 10s + source: + annotation_prefix: k8s.pod.annotation. + collector: kubernetes + exclude: + k8s.container.name: '[123+]bar$|xyz' + k8s.host.name: hhh123 + k8s.namespace.name: kube\s+ + k8s.pod.name: ^foo.* + pod_key: k8s.pod.name + pod_name_key: k8s.pod.pod_name + pod_template_hash_key: k8s.pod.label.pod-template-hash + source_category: '%{k8s.namespace.name}/%{k8s.pod.pod_name}' + source_category_prefix: kubernetes/ + source_category_replace_dash: / + source_host: '%{k8s.pod.hostname}' + source_name: '%{k8s.namespace.name}.%{k8s.pod.pod_name}.%{k8s.container.name}' + receivers: + jaeger: + protocols: + grpc: + endpoint: 0.0.0.0:14250 + thrift_binary: + endpoint: 0.0.0.0:6832 + thrift_compact: + endpoint: 0.0.0.0:6831 + thrift_http: + endpoint: 0.0.0.0:14268 + opencensus: + endpoint: 0.0.0.0:55678 + otlp: + protocols: + grpc: + endpoint: 0.0.0.0:4317 + http: + endpoint: 0.0.0.0:4318 + otlp/deprecated: + protocols: + http: + endpoint: 0.0.0.0:55681 + zipkin: + endpoint: 0.0.0.0:9411 + service: + extensions: + - health_check + - memory_ballast + - pprof + pipelines: + metrics: + exporters: + - sumologic/metrics + - debug + processors: + - memory_limiter + - k8s_tagger + - source + - resource + - batch + receivers: + - otlp + - otlp/deprecated + traces: + exporters: + - loadbalancing + - debug + processors: + - memory_limiter + - k8s_tagger + - source + - resource + - batch + receivers: + - jaeger + - opencensus + - otlp + - otlp/deprecated + - zipkin + telemetry: + logs: + level: info diff --git a/tests/helm/testdata/goldenfile/otelcol-instrumentation-config/traces-gateway-enabled.sumologic-mock.input.yaml b/tests/helm/testdata/goldenfile/otelcol-instrumentation-config/traces-gateway-enabled.sumologic-mock.input.yaml new file mode 100644 index 0000000000..07c63c8a0f --- /dev/null +++ b/tests/helm/testdata/goldenfile/otelcol-instrumentation-config/traces-gateway-enabled.sumologic-mock.input.yaml @@ -0,0 +1,14 @@ +otelcolInstrumentation: + sourceMetadata: + excludeNamespaceRegex: "kube\\s+" + excludePodRegex: "^foo.*" + excludeContainerRegex: "[123+]bar$|xyz" + excludeHostRegex: hhh123 + +tracesGateway: + enabled: false + +debug: + instrumentation: + otelcolInstrumentation: + print: true diff --git a/tests/helm/testdata/goldenfile/otelcol-instrumentation-config/traces-gateway-enabled.sumologic-mock.output.yaml b/tests/helm/testdata/goldenfile/otelcol-instrumentation-config/traces-gateway-enabled.sumologic-mock.output.yaml new file mode 100644 index 0000000000..d72c186905 --- /dev/null +++ b/tests/helm/testdata/goldenfile/otelcol-instrumentation-config/traces-gateway-enabled.sumologic-mock.output.yaml @@ -0,0 +1,177 @@ +--- +# Source: sumologic/templates/instrumentation/otelcol-instrumentation/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: RELEASE-NAME-sumologic-otelcol-instrumentation + namespace: sumologic + labels: + app: RELEASE-NAME-sumologic-otelcol-instrumentation + chart: "sumologic-%CURRENT_CHART_VERSION%" + release: "RELEASE-NAME" + heritage: "Helm" +data: + otelcol.instrumentation.conf.yaml: | + exporters: + debug: + verbosity: detailed + loadbalancing: + protocol: + otlp: + sending_queue: + enabled: true + num_consumers: 10 + queue_size: 10000 + timeout: 10s + tls: + insecure: true + resolver: + dns: + hostname: RELEASE-NAME-sumologic-traces-sampler-headless.sumologic + port: 4317 + sumologic/metrics: + client: k8s_%CURRENT_CHART_VERSION% + compress_encoding: gzip + endpoint: ${SUMO_ENDPOINT_DEFAULT_METRICS_SOURCE} + log_format: text + max_request_body_size: 1048576 + metric_format: prometheus + retry_on_failure: + enabled: true + initial_interval: 5s + max_elapsed_time: 120s + max_interval: 30s + sending_queue: + enabled: false + num_consumers: 10 + queue_size: 5000 + timeout: 5s + extensions: + health_check: {} + memory_ballast: + size_mib: 512 + pprof: {} + processors: + batch: + send_batch_max_size: 512 + send_batch_size: 256 + timeout: 5s + k8s_tagger: + extract: + annotations: + - key: '*' + tag_name: k8s.pod.annotation.%s + labels: + - key: '*' + tag_name: k8s.pod.label.%s + metadata: + - containerId + - containerName + - daemonSetName + - deploymentName + - hostName + - namespace + - nodeName + - podId + - podName + - replicaSetName + - serviceName + - statefulSetName + namespace_labels: + - key: '*' + tag_name: k8s.namespace.label.%s + owner_lookup_enabled: true + passthrough: false + memory_limiter: + check_interval: 5s + limit_percentage: 75 + spike_limit_percentage: 20 + resource: + attributes: + - action: upsert + key: k8s.cluster.name + value: kubernetes + resourcedetection: + detectors: + - system + override: false + timeout: 10s + source: + annotation_prefix: k8s.pod.annotation. + collector: kubernetes + exclude: + k8s.container.name: '[123+]bar$|xyz' + k8s.host.name: hhh123 + k8s.namespace.name: kube\s+ + k8s.pod.name: ^foo.* + pod_key: k8s.pod.name + pod_name_key: k8s.pod.pod_name + pod_template_hash_key: k8s.pod.label.pod-template-hash + source_category: '%{k8s.namespace.name}/%{k8s.pod.pod_name}' + source_category_prefix: kubernetes/ + source_category_replace_dash: / + source_host: '%{k8s.pod.hostname}' + source_name: '%{k8s.namespace.name}.%{k8s.pod.pod_name}.%{k8s.container.name}' + receivers: + jaeger: + protocols: + grpc: + endpoint: 0.0.0.0:14250 + thrift_binary: + endpoint: 0.0.0.0:6832 + thrift_compact: + endpoint: 0.0.0.0:6831 + thrift_http: + endpoint: 0.0.0.0:14268 + opencensus: + endpoint: 0.0.0.0:55678 + otlp: + protocols: + grpc: + endpoint: 0.0.0.0:4317 + http: + endpoint: 0.0.0.0:4318 + otlp/deprecated: + protocols: + http: + endpoint: 0.0.0.0:55681 + zipkin: + endpoint: 0.0.0.0:9411 + service: + extensions: + - health_check + - memory_ballast + - pprof + pipelines: + metrics: + exporters: + - sumologic/metrics + - debug + processors: + - memory_limiter + - k8s_tagger + - source + - resource + - batch + receivers: + - otlp + - otlp/deprecated + traces: + exporters: + - loadbalancing + - debug + processors: + - memory_limiter + - k8s_tagger + - source + - resource + - batch + receivers: + - jaeger + - opencensus + - otlp + - otlp/deprecated + - zipkin + telemetry: + logs: + level: info diff --git a/tests/helm/testdata/goldenfile/traces-gateway-loadbalancing/sumologic-mock.input.yaml b/tests/helm/testdata/goldenfile/traces-gateway-loadbalancing/sumologic-mock.input.yaml new file mode 100644 index 0000000000..4c43a52ce0 --- /dev/null +++ b/tests/helm/testdata/goldenfile/traces-gateway-loadbalancing/sumologic-mock.input.yaml @@ -0,0 +1,4 @@ +debug: + instrumentation: + tracesGateway: + print: true diff --git a/tests/helm/testdata/goldenfile/traces-gateway-loadbalancing/sumologic-mock.output.yaml b/tests/helm/testdata/goldenfile/traces-gateway-loadbalancing/sumologic-mock.output.yaml new file mode 100644 index 0000000000..b0f38dfa8d --- /dev/null +++ b/tests/helm/testdata/goldenfile/traces-gateway-loadbalancing/sumologic-mock.output.yaml @@ -0,0 +1,70 @@ +--- +# Source: sumologic/templates/instrumentation/traces-gateway/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: RELEASE-NAME-sumologic-traces-gateway + namespace: sumologic + labels: + app: RELEASE-NAME-sumologic-traces-gateway + chart: "sumologic-%CURRENT_CHART_VERSION%" + release: "RELEASE-NAME" + heritage: "Helm" +data: + traces.gateway.conf.yaml: | + exporters: + debug: + verbosity: detailed + loadbalancing: + protocol: + otlp: + sending_queue: + enabled: true + num_consumers: 10 + queue_size: 10000 + timeout: 10s + tls: + insecure: true + resolver: + dns: + hostname: RELEASE-NAME-sumologic-traces-sampler-headless.sumologic + port: 4317 + extensions: + health_check: {} + memory_ballast: + size_mib: 512 + pprof: {} + processors: + batch: + send_batch_max_size: 512 + send_batch_size: 256 + timeout: 5s + memory_limiter: + check_interval: 5s + limit_percentage: 75 + spike_limit_percentage: 20 + receivers: + otlp: + protocols: + grpc: + endpoint: 0.0.0.0:4317 + http: + endpoint: 0.0.0.0:4318 + service: + extensions: + - health_check + - memory_ballast + - pprof + pipelines: + traces: + exporters: + - loadbalancing + - debug + processors: + - memory_limiter + - batch + receivers: + - otlp + telemetry: + logs: + level: info diff --git a/tests/helm/testdata/goldenfile/traces-sampler/sumologic-mock.input.yaml b/tests/helm/testdata/goldenfile/traces-sampler/sumologic-mock.input.yaml new file mode 100644 index 0000000000..cfbee0086e --- /dev/null +++ b/tests/helm/testdata/goldenfile/traces-sampler/sumologic-mock.input.yaml @@ -0,0 +1,8 @@ +debug: + sumologicMock: + enabled: true + instrumentation: + tracesSampler: + print: true + # enable metrics forwarding + forwardToSumologicMock: true diff --git a/tests/helm/testdata/goldenfile/traces-sampler/sumologic-mock.output.yaml b/tests/helm/testdata/goldenfile/traces-sampler/sumologic-mock.output.yaml new file mode 100644 index 0000000000..5288ae0d77 --- /dev/null +++ b/tests/helm/testdata/goldenfile/traces-sampler/sumologic-mock.output.yaml @@ -0,0 +1,66 @@ +--- +# Source: sumologic/templates/instrumentation/traces-sampler/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: RELEASE-NAME-sumologic-traces-sampler + namespace: sumologic + labels: + app: RELEASE-NAME-sumologic-traces-sampler + chart: "sumologic-%CURRENT_CHART_VERSION%" + release: "RELEASE-NAME" + heritage: "Helm" +data: + traces.sampler.conf.yaml: | + exporters: + debug: + verbosity: detailed + otlphttp: + compression: gzip + endpoint: ${SUMO_ENDPOINT_DEFAULT_OTLP_TRACES_SOURCE} + otlphttp/sumologic-mock: + compression: gzip + endpoint: http://RELEASE-NAME-sumologic-mock.sumologic:3000/receiver + extensions: + health_check: {} + memory_ballast: + size_mib: 683 + pprof: {} + processors: + batch: + send_batch_max_size: 512 + send_batch_size: 256 + timeout: 5s + cascading_filter: + num_traces: 200000 + memory_limiter: + check_interval: 5s + limit_percentage: 75 + spike_limit_percentage: 20 + receivers: + otlp: + protocols: + grpc: + endpoint: 0.0.0.0:4317 + http: + endpoint: 0.0.0.0:4318 + service: + extensions: + - health_check + - memory_ballast + - pprof + pipelines: + traces: + exporters: + - otlphttp + - otlphttp/sumologic-mock + - debug + processors: + - memory_limiter + - cascading_filter + - batch + receivers: + - otlp + telemetry: + logs: + level: info diff --git a/vagrant/k8s/customer-trace-tester.yaml b/vagrant/k8s/customer-trace-tester.yaml new file mode 100644 index 0000000000..c8c1316b71 --- /dev/null +++ b/vagrant/k8s/customer-trace-tester.yaml @@ -0,0 +1,38 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: customer-trace-tester +spec: + finalizers: + - kubernetes + +--- +apiVersion: v1 +kind: Pod +metadata: + name: customer-trace-tester + namespace: customer-trace-tester +spec: + containers: + - args: + - bash + - -c + - while true; do customer-trace-tester; sleep 60; done + env: + - name: COLLECTOR_HOSTNAME + value: collection-sumologic-otelcol.sumologic + - name: TOTAL_TRACES + value: "1" + - name: SPANS_PER_TRACE + value: "10" + - name: OTLP_HTTP + value: "true" + - name: OTLP_GRPC + value: "true" + - name: ZIPKIN + value: "true" + - name: JAEGER_THRIFT_HTTP + value: "true" + image: sumologic/kubernetes-tools + name: customer-trace-tester