diff --git a/.changelog/3040.added.txt b/.changelog/3040.added.txt new file mode 100644 index 0000000000..c307ddff1f --- /dev/null +++ b/.changelog/3040.added.txt @@ -0,0 +1 @@ +feat(logs): add ability to use OTLP source \ No newline at end of file diff --git a/deploy/helm/sumologic/README.md b/deploy/helm/sumologic/README.md index 66839cc883..60290bf9fe 100644 --- a/deploy/helm/sumologic/README.md +++ b/deploy/helm/sumologic/README.md @@ -90,6 +90,7 @@ The following table lists the configurable parameters of the Sumo Logic chart an | `sumologic.logs.defaultFluentd.excludeUnitRegex` | Configuration option only for Fluentd, a regular expression for unit. Matching unit will be excluded from Sumo. The logs will still be sent to FluentD. . | `""` | | `sumologic.logs.fields` | Fields to be created at Sumo Logic to ensure logs are tagged with relevant metadata. [Sumo Logic help](https://help.sumologic.com/docs/manage/fields/#manage-fields) | `["cluster", "container", "daemonset", "deployment", "host", "namespace", "node", "pod", "service", "statefulset"]` | | `sumologic.logs.metadata.provider` | Defines logs metadata enrichment provider - `otelcol` or `fluentd`. `otelcol` is the default and is recommended. `fluentd` is deprecated. | `otelcol` | +| `sumologic.logs.sourceType` | The type of the Sumo Logic source being used for logs ingestion. Can be `http` for [HTTP Source](https://help.sumologic.com/docs/send-data/hosted-collectors/http-source/logs-metrics/) or `otlp` for [OTLP/HTTP Source](https://help.sumologic.com/docs/send-data/hosted-collectors/http-source/otlp/). | `http` | | `sumologic.metrics.enabled` | Set the enabled flag to false for disabling metrics ingestion altogether. | `true` | | `sumologic.metrics.metadata.provider` | Defines metrics metadata enrichment provider - `otelcol` or `fluentd`. `otelcol` is the default and is recommended. `fluentd` is deprecated. | `otelcol` | | `sumologic.metrics.otelcol.extraProcessors` | Extra processors configuration for metrics pipeline. See [/docs/collecting-application-metrics.md#metrics-modifications](/docs/collecting-application-metrics.md#metrics-modifications) for more information. | `[]` | diff --git a/deploy/helm/sumologic/conf/logs/otelcol/config.yaml b/deploy/helm/sumologic/conf/logs/otelcol/config.yaml index 8b23a38519..a52d54022b 100644 --- a/deploy/helm/sumologic/conf/logs/otelcol/config.yaml +++ b/deploy/helm/sumologic/conf/logs/otelcol/config.yaml @@ -1,16 +1,5 @@ -extensions: - health_check: {} -{{ if .Values.metadata.persistence.enabled }} - ## Configuration for File Storage extension - file_storage: - directory: /var/lib/storage/otc - timeout: 10s - compaction: - on_rebound: true - directory: /tmp -{{ end }} - pprof: {} exporters: +{{- if eq .Values.sumologic.logs.sourceType "http" }} {{ if .Values.sumologic.logs.container.enabled }} sumologic/containers: endpoint: ${SUMO_ENDPOINT_DEFAULT_LOGS_SOURCE} @@ -24,7 +13,7 @@ exporters: {{- if .Values.metadata.persistence.enabled }} storage: file_storage {{- end }} -{{ end }} +{{- end }} {{ if .Values.sumologic.logs.systemd.enabled }} sumologic/systemd: @@ -39,18 +28,33 @@ exporters: {{- if .Values.metadata.persistence.enabled }} storage: file_storage {{- end }} -{{ end }} +{{- end }} + +{{ else }} + sumologic: + endpoint: ${SUMO_ENDPOINT_DEFAULT_OTLP_LOGS_SOURCE} + log_format: otlp + clear_logs_timestamp: false + sending_queue: + enabled: true + num_consumers: 10 + queue_size: 10_000 +{{- if .Values.metadata.persistence.enabled }} + storage: file_storage +{{- end }} +{{- end }} extensions: + health_check: {} {{ if .Values.metadata.persistence.enabled }} + ## Configuration for File Storage extension file_storage: - compaction: - directory: /tmp - on_rebound: true directory: /var/lib/storage/otc timeout: 10s + compaction: + on_rebound: true + directory: /tmp {{ end }} - health_check: {} pprof: {} processors: @@ -460,7 +464,7 @@ service: {{ if .Values.sumologic.logs.container.enabled }} logs/fluent/containers: exporters: - - sumologic/containers +{{ include "logs.otelcol.container.exporters" . | indent 8 }} processors: - memory_limiter - filter/include_fluent_tag_containers @@ -495,7 +499,7 @@ service: {{ if .Values.sumologic.logs.systemd.enabled }} logs/fluent/kubelet: exporters: - - sumologic/systemd +{{ include "logs.otelcol.kubelet.exporters" . | indent 8 }} processors: - memory_limiter - filter/include_fluent_tag_host @@ -516,7 +520,7 @@ service: logs/fluent/systemd: exporters: - - sumologic/systemd +{{ include "logs.otelcol.systemd.exporters" . | indent 8 }} processors: - memory_limiter - filter/include_fluent_tag_host @@ -546,7 +550,7 @@ service: ## - attributes/fluent_containers functionality is being replaced by otellogs operators logs/otlp/containers: exporters: - - sumologic/containers +{{ include "logs.otelcol.container.exporters" . | indent 8 }} processors: - memory_limiter - filter/include_containers @@ -582,7 +586,7 @@ service: ## - added transform/remove_attributes processor logs/otlp/kubelet: exporters: - - sumologic/systemd +{{ include "logs.otelcol.kubelet.exporters" . | indent 8 }} processors: - memory_limiter - filter/include_fluent_tag_host @@ -608,7 +612,7 @@ service: ## - added transform/remove_attributes processor logs/otlp/systemd: exporters: - - sumologic/systemd +{{ include "logs.otelcol.systemd.exporters" . | indent 8 }} processors: - memory_limiter - filter/include_fluent_tag_host diff --git a/deploy/helm/sumologic/templates/_helpers/_logs.tpl b/deploy/helm/sumologic/templates/_helpers/_logs.tpl index f3fc9a2007..d5092292f9 100644 --- a/deploy/helm/sumologic/templates/_helpers/_logs.tpl +++ b/deploy/helm/sumologic/templates/_helpers/_logs.tpl @@ -115,6 +115,51 @@ Return the log format for the Sumologic exporter for container logs. {{- end -}} {{- end -}} +{{/* +Return the exporters for container log pipeline. + +'{{ include "logs.otelcol.container.exporters" . }}' +*/}} +{{- define "logs.otelcol.container.exporters" -}} +{{- if eq .Values.sumologic.logs.sourceType "http" -}} +- sumologic/containers +{{- else if eq .Values.sumologic.logs.sourceType "otlp" }} +- sumologic +{{- else -}} +{{- fail "`sumologic.logs.sourceType` can only be `http` or `otlp`" -}} +{{- end -}} +{{- end -}} + +{{/* +Return the exporters for systemd log pipeline. + +'{{ include "logs.otelcol.systemd.exporters" . }}' +*/}} +{{- define "logs.otelcol.systemd.exporters" -}} +{{- if eq .Values.sumologic.logs.sourceType "http" -}} +- sumologic/systemd +{{- else if eq .Values.sumologic.logs.sourceType "otlp" }} +- sumologic +{{- else -}} +{{- fail "`sumologic.logs.sourceType` can only be `http` or `otlp`" -}} +{{- end -}} +{{- end -}} + +{{/* +Return the exporters for kubelet log pipeline. + +'{{ include "logs.otelcol.kubelet.exporters" . }}' +*/}} +{{- define "logs.otelcol.kubelet.exporters" -}} +{{- if eq .Values.sumologic.logs.sourceType "http" }} +- sumologic/systemd +{{- else if eq .Values.sumologic.logs.sourceType "otlp" }} +- sumologic +{{- else }} +{{- fail "`sumologic.logs.sourceType` can only be `http` or `otlp`" -}} +{{- end -}} +{{- end -}} + {{- define "sumologic.labels.app.logs" -}} {{- if eq .Values.sumologic.logs.metadata.provider "fluentd" -}} {{ template "sumologic.labels.app.fluentd" . }}-logs diff --git a/deploy/helm/sumologic/values.yaml b/deploy/helm/sumologic/values.yaml index 3614c3abda..3acca60fa2 100644 --- a/deploy/helm/sumologic/values.yaml +++ b/deploy/helm/sumologic/values.yaml @@ -201,6 +201,11 @@ sumologic: # - name: "Test Exclude Debug" # filter_type: "Exclude" # regexp: ".*DEBUG.*" + default-otlp: + name: logs-otlp + config-name: endpoint-logs-otlp + properties: + content_type: Otlp events: default: name: events @@ -417,6 +422,8 @@ sumologic: - service - statefulset + sourceType: http + ### Metrics configuration ## Set the enabled flag to false for disabling metrics ingestion altogether. metrics: diff --git a/docs/otlp-source.md b/docs/otlp-source.md new file mode 100644 index 0000000000..ac9f38973d --- /dev/null +++ b/docs/otlp-source.md @@ -0,0 +1,41 @@ +# Using the OTLP source + +Historically, agents used by this Chart sent logs and metrics data to a [generic HTTP Source][http_source] in Sumo Logic. Ever since the +[version 3][v3] release, the Chart predominantly uses the [OpenTelemetry Collector][otel], and consequently also the [OTLP protocol][otlp]. +The data needed to be converted to the formats the generic HTTP source supports before being sent. + +Recently, we've added support for directly sending data using the OTLP protocol to Sumo Logic. This is achieved using the [OTLP +source][otlp_source]. This document explains how to use this new source with the Helm Chart. + +**Note:** This Chart currently only supports OTLP Source for the following signal types: logs + +## Enabling the OTLP source + +Add the following to your configuration: + +```yaml +sumologic: + logs: + sourceType: otlp +``` + +**Note:** The source is automatically created during Chart installation. This setting simply makes the Chart start sending data to it. + +## Benefits + +Sending data directly via OTLP is more efficient, as we skip the conversion step. OTLP is also a binary-encoded format, which improves the +efficiency further. + +### Logs + +As a structured log format, OTLP frees us from the need to parse metadata out of the log body on the Sumo side. This makes the following +features work without additional manual configuration: + +- multiline parsing for the `text` log format +- correct timestamps for the `text` log format + +[http_source]: https://help.sumologic.com/docs/send-data/hosted-collectors/http-source/logs-metrics/ +[otlp_source]: https://help.sumologic.com/docs/send-data/hosted-collectors/http-source/otlp/ +[v3]: https://github.com/SumoLogic/sumologic-kubernetes-collection/releases/tag/v3.0.0 +[otel]: ./opentelemetry-collector.md +[otlp]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md diff --git a/tests/helm/logs_test.go b/tests/helm/logs_test.go index 25790b93a5..cb6c209144 100644 --- a/tests/helm/logs_test.go +++ b/tests/helm/logs_test.go @@ -261,6 +261,37 @@ sumologic: } } +func TestMetadataLogOtlpSource(t *testing.T) { + t.Parallel() + templatePath := "templates/logs/otelcol/configmap.yaml" + valuesYaml := ` +sumologic: + logs: + sourceType: otlp +` + + var otelConfig struct { + Exporters map[string]map[string]interface{} + Processors map[string]interface{} + Service struct { + Pipelines map[string]struct { + Receivers []string + Processors []string + Exporters []string + } + } + } + + otelConfigYaml := GetOtelConfigYaml(t, valuesYaml, templatePath) + err := yaml.Unmarshal([]byte(otelConfigYaml), &otelConfig) + require.NoError(t, err) + require.ElementsMatch(t, []string{"sumologic"}, keys(otelConfig.Exporters)) + require.Equal(t, "otlp", otelConfig.Exporters["sumologic"]["log_format"]) + require.ElementsMatch(t, []string{"sumologic"}, otelConfig.Service.Pipelines["logs/otlp/containers"].Exporters) + require.ElementsMatch(t, []string{"sumologic"}, otelConfig.Service.Pipelines["logs/otlp/systemd"].Exporters) + require.ElementsMatch(t, []string{"sumologic"}, otelConfig.Service.Pipelines["logs/otlp/kubelet"].Exporters) +} + func TestCollectorOtelConfigMerge(t *testing.T) { t.Parallel() templatePath := "templates/logs/collector/otelcol/configmap.yaml" diff --git a/tests/helm/testdata/goldenfile/metadata_logs_otc_statefulset/basic.output.yaml b/tests/helm/testdata/goldenfile/metadata_logs_otc_statefulset/basic.output.yaml index 32a4b5acdb..d48d4dd261 100644 --- a/tests/helm/testdata/goldenfile/metadata_logs_otc_statefulset/basic.output.yaml +++ b/tests/helm/testdata/goldenfile/metadata_logs_otc_statefulset/basic.output.yaml @@ -117,6 +117,11 @@ spec: secretKeyRef: name: sumologic key: endpoint-logs + - name: SUMO_ENDPOINT_DEFAULT_OTLP_LOGS_SOURCE + valueFrom: + secretKeyRef: + name: sumologic + key: endpoint-logs-otlp - name: NO_PROXY value: kubernetes.default.svc diff --git a/tests/helm/testdata/goldenfile/metadata_logs_otc_statefulset/custom.output.yaml b/tests/helm/testdata/goldenfile/metadata_logs_otc_statefulset/custom.output.yaml index ae91c2f701..6929555c17 100644 --- a/tests/helm/testdata/goldenfile/metadata_logs_otc_statefulset/custom.output.yaml +++ b/tests/helm/testdata/goldenfile/metadata_logs_otc_statefulset/custom.output.yaml @@ -140,6 +140,11 @@ spec: secretKeyRef: name: sumologic key: endpoint-logs + - name: SUMO_ENDPOINT_DEFAULT_OTLP_LOGS_SOURCE + valueFrom: + secretKeyRef: + name: sumologic + key: endpoint-logs-otlp - name: NO_PROXY value: kubernetes.default.svc diff --git a/tests/helm/testdata/goldenfile/terraform/all_fields.output.yaml b/tests/helm/testdata/goldenfile/terraform/all_fields.output.yaml index 8df027dfae..583bd1bf52 100644 --- a/tests/helm/testdata/goldenfile/terraform/all_fields.output.yaml +++ b/tests/helm/testdata/goldenfile/terraform/all_fields.output.yaml @@ -345,6 +345,7 @@ data: locals { default_events_source = "events" default_logs_source = "logs" + default_otlp_logs_source = "logs-otlp" apiserver_metrics_source = "apiserver-metrics" control_plane_metrics_source = "control-plane-metrics" controller_metrics_source = "kube-controller-manager-metrics" @@ -484,6 +485,12 @@ data: } } + resource "sumologic_http_source" "default_otlp_logs_source" { + name = local.default_otlp_logs_source + collector_id = sumologic_collector.collector.id + content_type = "Otlp" + } + resource "sumologic_http_source" "apiserver_metrics_source" { name = local.apiserver_metrics_source collector_id = sumologic_collector.collector.id @@ -584,6 +591,7 @@ data: data = { endpoint-events = sumologic_http_source.default_events_source.url endpoint-logs = sumologic_http_source.default_logs_source.url + endpoint-logs-otlp = sumologic_http_source.default_otlp_logs_source.url endpoint-metrics-apiserver = sumologic_http_source.apiserver_metrics_source.url endpoint-control_plane_metrics_source = sumologic_http_source.control_plane_metrics_source.url endpoint-metrics-kube-controller-manager = sumologic_http_source.controller_metrics_source.url @@ -727,6 +735,7 @@ data: true # prevent to render empty if; then terraform import sumologic_http_source.default_events_source "${COLLECTOR_NAME}/events" terraform import sumologic_http_source.default_logs_source "${COLLECTOR_NAME}/logs" + terraform import sumologic_http_source.default_otlp_logs_source "${COLLECTOR_NAME}/logs-otlp" terraform import sumologic_http_source.apiserver_metrics_source "${COLLECTOR_NAME}/apiserver-metrics" terraform import sumologic_http_source.control_plane_metrics_source "${COLLECTOR_NAME}/control-plane-metrics" terraform import sumologic_http_source.controller_metrics_source "${COLLECTOR_NAME}/kube-controller-manager-metrics" diff --git a/tests/helm/testdata/goldenfile/terraform/collector_fields.output.yaml b/tests/helm/testdata/goldenfile/terraform/collector_fields.output.yaml index 4b256cb95d..772641b9f5 100644 --- a/tests/helm/testdata/goldenfile/terraform/collector_fields.output.yaml +++ b/tests/helm/testdata/goldenfile/terraform/collector_fields.output.yaml @@ -345,6 +345,7 @@ data: locals { default_events_source = "events" default_logs_source = "logs" + default_otlp_logs_source = "logs-otlp" apiserver_metrics_source = "apiserver-metrics" control_plane_metrics_source = "control-plane-metrics" controller_metrics_source = "kube-controller-manager-metrics" @@ -485,6 +486,12 @@ data: } } + resource "sumologic_http_source" "default_otlp_logs_source" { + name = local.default_otlp_logs_source + collector_id = sumologic_collector.collector.id + content_type = "Otlp" + } + resource "sumologic_http_source" "apiserver_metrics_source" { name = local.apiserver_metrics_source collector_id = sumologic_collector.collector.id @@ -540,6 +547,7 @@ data: data = { endpoint-events = sumologic_http_source.default_events_source.url endpoint-logs = sumologic_http_source.default_logs_source.url + endpoint-logs-otlp = sumologic_http_source.default_otlp_logs_source.url endpoint-metrics-apiserver = sumologic_http_source.apiserver_metrics_source.url endpoint-control_plane_metrics_source = sumologic_http_source.control_plane_metrics_source.url endpoint-metrics-kube-controller-manager = sumologic_http_source.controller_metrics_source.url @@ -682,6 +690,7 @@ data: true # prevent to render empty if; then terraform import sumologic_http_source.default_events_source "${COLLECTOR_NAME}/events" terraform import sumologic_http_source.default_logs_source "${COLLECTOR_NAME}/logs" + terraform import sumologic_http_source.default_otlp_logs_source "${COLLECTOR_NAME}/logs-otlp" terraform import sumologic_http_source.apiserver_metrics_source "${COLLECTOR_NAME}/apiserver-metrics" terraform import sumologic_http_source.control_plane_metrics_source "${COLLECTOR_NAME}/control-plane-metrics" terraform import sumologic_http_source.controller_metrics_source "${COLLECTOR_NAME}/kube-controller-manager-metrics" diff --git a/tests/helm/testdata/goldenfile/terraform/default.output.yaml b/tests/helm/testdata/goldenfile/terraform/default.output.yaml index ebe4dfcfd3..651edae692 100644 --- a/tests/helm/testdata/goldenfile/terraform/default.output.yaml +++ b/tests/helm/testdata/goldenfile/terraform/default.output.yaml @@ -345,6 +345,7 @@ data: locals { default_events_source = "events" default_logs_source = "logs" + default_otlp_logs_source = "logs-otlp" apiserver_metrics_source = "apiserver-metrics" control_plane_metrics_source = "control-plane-metrics" controller_metrics_source = "kube-controller-manager-metrics" @@ -483,6 +484,12 @@ data: } } + resource "sumologic_http_source" "default_otlp_logs_source" { + name = local.default_otlp_logs_source + collector_id = sumologic_collector.collector.id + content_type = "Otlp" + } + resource "sumologic_http_source" "apiserver_metrics_source" { name = local.apiserver_metrics_source collector_id = sumologic_collector.collector.id @@ -538,6 +545,7 @@ data: data = { endpoint-events = sumologic_http_source.default_events_source.url endpoint-logs = sumologic_http_source.default_logs_source.url + endpoint-logs-otlp = sumologic_http_source.default_otlp_logs_source.url endpoint-metrics-apiserver = sumologic_http_source.apiserver_metrics_source.url endpoint-control_plane_metrics_source = sumologic_http_source.control_plane_metrics_source.url endpoint-metrics-kube-controller-manager = sumologic_http_source.controller_metrics_source.url @@ -680,6 +688,7 @@ data: true # prevent to render empty if; then terraform import sumologic_http_source.default_events_source "${COLLECTOR_NAME}/events" terraform import sumologic_http_source.default_logs_source "${COLLECTOR_NAME}/logs" + terraform import sumologic_http_source.default_otlp_logs_source "${COLLECTOR_NAME}/logs-otlp" terraform import sumologic_http_source.apiserver_metrics_source "${COLLECTOR_NAME}/apiserver-metrics" terraform import sumologic_http_source.control_plane_metrics_source "${COLLECTOR_NAME}/control-plane-metrics" terraform import sumologic_http_source.controller_metrics_source "${COLLECTOR_NAME}/kube-controller-manager-metrics" diff --git a/tests/helm/testdata/goldenfile/terraform/disable_default_metrics.output.yaml b/tests/helm/testdata/goldenfile/terraform/disable_default_metrics.output.yaml index 9e6f621117..20e1341285 100644 --- a/tests/helm/testdata/goldenfile/terraform/disable_default_metrics.output.yaml +++ b/tests/helm/testdata/goldenfile/terraform/disable_default_metrics.output.yaml @@ -345,6 +345,7 @@ data: locals { default_events_source = "events" default_logs_source = "logs" + default_otlp_logs_source = "logs-otlp" apiserver_metrics_source = "apiserver-metrics" control_plane_metrics_source = "control-plane-metrics" controller_metrics_source = "kube-controller-manager-metrics" @@ -482,6 +483,12 @@ data: } } + resource "sumologic_http_source" "default_otlp_logs_source" { + name = local.default_otlp_logs_source + collector_id = sumologic_collector.collector.id + content_type = "Otlp" + } + resource "sumologic_http_source" "apiserver_metrics_source" { name = local.apiserver_metrics_source collector_id = sumologic_collector.collector.id @@ -532,6 +539,7 @@ data: data = { endpoint-events = sumologic_http_source.default_events_source.url endpoint-logs = sumologic_http_source.default_logs_source.url + endpoint-logs-otlp = sumologic_http_source.default_otlp_logs_source.url endpoint-metrics-apiserver = sumologic_http_source.apiserver_metrics_source.url endpoint-control_plane_metrics_source = sumologic_http_source.control_plane_metrics_source.url endpoint-metrics-kube-controller-manager = sumologic_http_source.controller_metrics_source.url @@ -673,6 +681,7 @@ data: true # prevent to render empty if; then terraform import sumologic_http_source.default_events_source "${COLLECTOR_NAME}/events" terraform import sumologic_http_source.default_logs_source "${COLLECTOR_NAME}/logs" + terraform import sumologic_http_source.default_otlp_logs_source "${COLLECTOR_NAME}/logs-otlp" terraform import sumologic_http_source.apiserver_metrics_source "${COLLECTOR_NAME}/apiserver-metrics" terraform import sumologic_http_source.control_plane_metrics_source "${COLLECTOR_NAME}/control-plane-metrics" terraform import sumologic_http_source.controller_metrics_source "${COLLECTOR_NAME}/kube-controller-manager-metrics" diff --git a/tests/helm/testdata/goldenfile/terraform/disabled_dashboards.output.yaml b/tests/helm/testdata/goldenfile/terraform/disabled_dashboards.output.yaml index ac3280b6bb..d3a62cbb44 100644 --- a/tests/helm/testdata/goldenfile/terraform/disabled_dashboards.output.yaml +++ b/tests/helm/testdata/goldenfile/terraform/disabled_dashboards.output.yaml @@ -345,6 +345,7 @@ data: locals { default_events_source = "events" default_logs_source = "logs" + default_otlp_logs_source = "logs-otlp" apiserver_metrics_source = "apiserver-metrics" control_plane_metrics_source = "control-plane-metrics" controller_metrics_source = "kube-controller-manager-metrics" @@ -483,6 +484,12 @@ data: } } + resource "sumologic_http_source" "default_otlp_logs_source" { + name = local.default_otlp_logs_source + collector_id = sumologic_collector.collector.id + content_type = "Otlp" + } + resource "sumologic_http_source" "apiserver_metrics_source" { name = local.apiserver_metrics_source collector_id = sumologic_collector.collector.id @@ -538,6 +545,7 @@ data: data = { endpoint-events = sumologic_http_source.default_events_source.url endpoint-logs = sumologic_http_source.default_logs_source.url + endpoint-logs-otlp = sumologic_http_source.default_otlp_logs_source.url endpoint-metrics-apiserver = sumologic_http_source.apiserver_metrics_source.url endpoint-control_plane_metrics_source = sumologic_http_source.control_plane_metrics_source.url endpoint-metrics-kube-controller-manager = sumologic_http_source.controller_metrics_source.url @@ -680,6 +688,7 @@ data: true # prevent to render empty if; then terraform import sumologic_http_source.default_events_source "${COLLECTOR_NAME}/events" terraform import sumologic_http_source.default_logs_source "${COLLECTOR_NAME}/logs" + terraform import sumologic_http_source.default_otlp_logs_source "${COLLECTOR_NAME}/logs-otlp" terraform import sumologic_http_source.apiserver_metrics_source "${COLLECTOR_NAME}/apiserver-metrics" terraform import sumologic_http_source.control_plane_metrics_source "${COLLECTOR_NAME}/control-plane-metrics" terraform import sumologic_http_source.controller_metrics_source "${COLLECTOR_NAME}/kube-controller-manager-metrics" diff --git a/tests/helm/testdata/goldenfile/terraform/disabled_monitors.output.yaml b/tests/helm/testdata/goldenfile/terraform/disabled_monitors.output.yaml index 5605e59503..138cbff6ab 100644 --- a/tests/helm/testdata/goldenfile/terraform/disabled_monitors.output.yaml +++ b/tests/helm/testdata/goldenfile/terraform/disabled_monitors.output.yaml @@ -345,6 +345,7 @@ data: locals { default_events_source = "events" default_logs_source = "logs" + default_otlp_logs_source = "logs-otlp" apiserver_metrics_source = "apiserver-metrics" control_plane_metrics_source = "control-plane-metrics" controller_metrics_source = "kube-controller-manager-metrics" @@ -483,6 +484,12 @@ data: } } + resource "sumologic_http_source" "default_otlp_logs_source" { + name = local.default_otlp_logs_source + collector_id = sumologic_collector.collector.id + content_type = "Otlp" + } + resource "sumologic_http_source" "apiserver_metrics_source" { name = local.apiserver_metrics_source collector_id = sumologic_collector.collector.id @@ -538,6 +545,7 @@ data: data = { endpoint-events = sumologic_http_source.default_events_source.url endpoint-logs = sumologic_http_source.default_logs_source.url + endpoint-logs-otlp = sumologic_http_source.default_otlp_logs_source.url endpoint-metrics-apiserver = sumologic_http_source.apiserver_metrics_source.url endpoint-control_plane_metrics_source = sumologic_http_source.control_plane_metrics_source.url endpoint-metrics-kube-controller-manager = sumologic_http_source.controller_metrics_source.url @@ -680,6 +688,7 @@ data: true # prevent to render empty if; then terraform import sumologic_http_source.default_events_source "${COLLECTOR_NAME}/events" terraform import sumologic_http_source.default_logs_source "${COLLECTOR_NAME}/logs" + terraform import sumologic_http_source.default_otlp_logs_source "${COLLECTOR_NAME}/logs-otlp" terraform import sumologic_http_source.apiserver_metrics_source "${COLLECTOR_NAME}/apiserver-metrics" terraform import sumologic_http_source.control_plane_metrics_source "${COLLECTOR_NAME}/control-plane-metrics" terraform import sumologic_http_source.controller_metrics_source "${COLLECTOR_NAME}/kube-controller-manager-metrics" diff --git a/tests/helm/testdata/goldenfile/terraform/monitors_with_email_notifications.output.yaml b/tests/helm/testdata/goldenfile/terraform/monitors_with_email_notifications.output.yaml index 8a04959f20..a56fbb5bb0 100644 --- a/tests/helm/testdata/goldenfile/terraform/monitors_with_email_notifications.output.yaml +++ b/tests/helm/testdata/goldenfile/terraform/monitors_with_email_notifications.output.yaml @@ -345,6 +345,7 @@ data: locals { default_events_source = "events" default_logs_source = "logs" + default_otlp_logs_source = "logs-otlp" apiserver_metrics_source = "apiserver-metrics" control_plane_metrics_source = "control-plane-metrics" controller_metrics_source = "kube-controller-manager-metrics" @@ -489,6 +490,12 @@ data: } } + resource "sumologic_http_source" "default_otlp_logs_source" { + name = local.default_otlp_logs_source + collector_id = sumologic_collector.collector.id + content_type = "Otlp" + } + resource "sumologic_http_source" "apiserver_metrics_source" { name = local.apiserver_metrics_source collector_id = sumologic_collector.collector.id @@ -544,6 +551,7 @@ data: data = { endpoint-events = sumologic_http_source.default_events_source.url endpoint-logs = sumologic_http_source.default_logs_source.url + endpoint-logs-otlp = sumologic_http_source.default_otlp_logs_source.url endpoint-metrics-apiserver = sumologic_http_source.apiserver_metrics_source.url endpoint-control_plane_metrics_source = sumologic_http_source.control_plane_metrics_source.url endpoint-metrics-kube-controller-manager = sumologic_http_source.controller_metrics_source.url @@ -686,6 +694,7 @@ data: true # prevent to render empty if; then terraform import sumologic_http_source.default_events_source "${COLLECTOR_NAME}/events" terraform import sumologic_http_source.default_logs_source "${COLLECTOR_NAME}/logs" + terraform import sumologic_http_source.default_otlp_logs_source "${COLLECTOR_NAME}/logs-otlp" terraform import sumologic_http_source.apiserver_metrics_source "${COLLECTOR_NAME}/apiserver-metrics" terraform import sumologic_http_source.control_plane_metrics_source "${COLLECTOR_NAME}/control-plane-metrics" terraform import sumologic_http_source.controller_metrics_source "${COLLECTOR_NAME}/kube-controller-manager-metrics" diff --git a/tests/helm/testdata/goldenfile/terraform/monitors_with_single_email.output.yaml b/tests/helm/testdata/goldenfile/terraform/monitors_with_single_email.output.yaml index a0ccc77a92..f00df1bbf8 100644 --- a/tests/helm/testdata/goldenfile/terraform/monitors_with_single_email.output.yaml +++ b/tests/helm/testdata/goldenfile/terraform/monitors_with_single_email.output.yaml @@ -345,6 +345,7 @@ data: locals { default_events_source = "events" default_logs_source = "logs" + default_otlp_logs_source = "logs-otlp" apiserver_metrics_source = "apiserver-metrics" control_plane_metrics_source = "control-plane-metrics" controller_metrics_source = "kube-controller-manager-metrics" @@ -489,6 +490,12 @@ data: } } + resource "sumologic_http_source" "default_otlp_logs_source" { + name = local.default_otlp_logs_source + collector_id = sumologic_collector.collector.id + content_type = "Otlp" + } + resource "sumologic_http_source" "apiserver_metrics_source" { name = local.apiserver_metrics_source collector_id = sumologic_collector.collector.id @@ -544,6 +551,7 @@ data: data = { endpoint-events = sumologic_http_source.default_events_source.url endpoint-logs = sumologic_http_source.default_logs_source.url + endpoint-logs-otlp = sumologic_http_source.default_otlp_logs_source.url endpoint-metrics-apiserver = sumologic_http_source.apiserver_metrics_source.url endpoint-control_plane_metrics_source = sumologic_http_source.control_plane_metrics_source.url endpoint-metrics-kube-controller-manager = sumologic_http_source.controller_metrics_source.url @@ -686,6 +694,7 @@ data: true # prevent to render empty if; then terraform import sumologic_http_source.default_events_source "${COLLECTOR_NAME}/events" terraform import sumologic_http_source.default_logs_source "${COLLECTOR_NAME}/logs" + terraform import sumologic_http_source.default_otlp_logs_source "${COLLECTOR_NAME}/logs-otlp" terraform import sumologic_http_source.apiserver_metrics_source "${COLLECTOR_NAME}/apiserver-metrics" terraform import sumologic_http_source.control_plane_metrics_source "${COLLECTOR_NAME}/control-plane-metrics" terraform import sumologic_http_source.controller_metrics_source "${COLLECTOR_NAME}/kube-controller-manager-metrics" diff --git a/tests/helm/testdata/goldenfile/terraform/strip_extrapolation.output.yaml b/tests/helm/testdata/goldenfile/terraform/strip_extrapolation.output.yaml index 996d8c83b4..130c601492 100644 --- a/tests/helm/testdata/goldenfile/terraform/strip_extrapolation.output.yaml +++ b/tests/helm/testdata/goldenfile/terraform/strip_extrapolation.output.yaml @@ -345,6 +345,7 @@ data: locals { default_events_source = "events" default_logs_source = "logs" + default_otlp_logs_source = "logs-otlp" apiserver_metrics_source = "apiserver-metrics" control_plane_metrics_source = "control-plane-metrics" controller_metrics_source = "kube-controller-manager-metrics" @@ -484,6 +485,12 @@ data: } } + resource "sumologic_http_source" "default_otlp_logs_source" { + name = local.default_otlp_logs_source + collector_id = sumologic_collector.collector.id + content_type = "Otlp" + } + resource "sumologic_http_source" "apiserver_metrics_source" { name = local.apiserver_metrics_source collector_id = sumologic_collector.collector.id @@ -539,6 +546,7 @@ data: data = { endpoint-events = sumologic_http_source.default_events_source.url endpoint-logs = sumologic_http_source.default_logs_source.url + endpoint-logs-otlp = sumologic_http_source.default_otlp_logs_source.url endpoint-metrics-apiserver = sumologic_http_source.apiserver_metrics_source.url endpoint-control_plane_metrics_source = sumologic_http_source.control_plane_metrics_source.url endpoint-metrics-kube-controller-manager = sumologic_http_source.controller_metrics_source.url @@ -681,6 +689,7 @@ data: true # prevent to render empty if; then terraform import sumologic_http_source.default_events_source "${COLLECTOR_NAME}/events" terraform import sumologic_http_source.default_logs_source "${COLLECTOR_NAME}/logs" + terraform import sumologic_http_source.default_otlp_logs_source "${COLLECTOR_NAME}/logs-otlp" terraform import sumologic_http_source.apiserver_metrics_source "${COLLECTOR_NAME}/apiserver-metrics" terraform import sumologic_http_source.control_plane_metrics_source "${COLLECTOR_NAME}/control-plane-metrics" terraform import sumologic_http_source.controller_metrics_source "${COLLECTOR_NAME}/kube-controller-manager-metrics" diff --git a/tests/helm/testdata/goldenfile/terraform/tracing-metrics-disabled.output.yaml b/tests/helm/testdata/goldenfile/terraform/tracing-metrics-disabled.output.yaml index ebe4dfcfd3..651edae692 100644 --- a/tests/helm/testdata/goldenfile/terraform/tracing-metrics-disabled.output.yaml +++ b/tests/helm/testdata/goldenfile/terraform/tracing-metrics-disabled.output.yaml @@ -345,6 +345,7 @@ data: locals { default_events_source = "events" default_logs_source = "logs" + default_otlp_logs_source = "logs-otlp" apiserver_metrics_source = "apiserver-metrics" control_plane_metrics_source = "control-plane-metrics" controller_metrics_source = "kube-controller-manager-metrics" @@ -483,6 +484,12 @@ data: } } + resource "sumologic_http_source" "default_otlp_logs_source" { + name = local.default_otlp_logs_source + collector_id = sumologic_collector.collector.id + content_type = "Otlp" + } + resource "sumologic_http_source" "apiserver_metrics_source" { name = local.apiserver_metrics_source collector_id = sumologic_collector.collector.id @@ -538,6 +545,7 @@ data: data = { endpoint-events = sumologic_http_source.default_events_source.url endpoint-logs = sumologic_http_source.default_logs_source.url + endpoint-logs-otlp = sumologic_http_source.default_otlp_logs_source.url endpoint-metrics-apiserver = sumologic_http_source.apiserver_metrics_source.url endpoint-control_plane_metrics_source = sumologic_http_source.control_plane_metrics_source.url endpoint-metrics-kube-controller-manager = sumologic_http_source.controller_metrics_source.url @@ -680,6 +688,7 @@ data: true # prevent to render empty if; then terraform import sumologic_http_source.default_events_source "${COLLECTOR_NAME}/events" terraform import sumologic_http_source.default_logs_source "${COLLECTOR_NAME}/logs" + terraform import sumologic_http_source.default_otlp_logs_source "${COLLECTOR_NAME}/logs-otlp" terraform import sumologic_http_source.apiserver_metrics_source "${COLLECTOR_NAME}/apiserver-metrics" terraform import sumologic_http_source.control_plane_metrics_source "${COLLECTOR_NAME}/control-plane-metrics" terraform import sumologic_http_source.controller_metrics_source "${COLLECTOR_NAME}/kube-controller-manager-metrics" diff --git a/tests/integration/helm_fluentbit_containerd_multiline_logs_test.go b/tests/integration/helm_fluentbit_containerd_multiline_logs_test.go index d43897e844..9b8a9e6ace 100644 --- a/tests/integration/helm_fluentbit_containerd_multiline_logs_test.go +++ b/tests/integration/helm_fluentbit_containerd_multiline_logs_test.go @@ -6,7 +6,7 @@ import ( func Test_Helm_FluentBit_Containerd_Multiline_Logs(t *testing.T) { installChecks := []featureCheck{ - CheckSumologicSecret(1), + CheckSumologicSecret(2), CheckOtelcolMetadataLogsInstall, CheckFluentBitInstall, } diff --git a/tests/integration/helm_fluentbit_fluentd_test.go b/tests/integration/helm_fluentbit_fluentd_test.go index 932f68a022..5f53a35ff5 100644 --- a/tests/integration/helm_fluentbit_fluentd_test.go +++ b/tests/integration/helm_fluentbit_fluentd_test.go @@ -10,7 +10,7 @@ func Test_Helm_FluentBit_Fluentd(t *testing.T) { expectedMetrics := internal.DefaultExpectedFluentdFluentbitMetrics installChecks := []featureCheck{ - CheckSumologicSecret(10), + CheckSumologicSecret(11), CheckFluentdMetadataLogsInstall, CheckFluentdMetadataMetricsInstall, CheckFluentdEventsInstall, diff --git a/tests/integration/helm_ot_default_namespaceoverride_test.go b/tests/integration/helm_ot_default_namespaceoverride_test.go index c0229b6b9e..723070953c 100644 --- a/tests/integration/helm_ot_default_namespaceoverride_test.go +++ b/tests/integration/helm_ot_default_namespaceoverride_test.go @@ -19,7 +19,7 @@ func Test_Helm_Default_OT_NamespaceOverride(t *testing.T) { expectedMetrics = append(expectedMetrics, internal.TracingOtelcolMetrics...) installChecks := []featureCheck{ - CheckSumologicSecret(11), + CheckSumologicSecret(12), CheckOtelcolMetadataLogsInstall, CheckOtelcolMetadataMetricsInstall, CheckOtelcolEventsInstall, diff --git a/tests/integration/helm_ot_default_test.go b/tests/integration/helm_ot_default_test.go index bf264b0d16..1f882d4f45 100644 --- a/tests/integration/helm_ot_default_test.go +++ b/tests/integration/helm_ot_default_test.go @@ -13,7 +13,7 @@ func Test_Helm_Default_OT(t *testing.T) { expectedMetrics = append(expectedMetrics, internal.TracingOtelcolMetrics...) installChecks := []featureCheck{ - CheckSumologicSecret(11), + CheckSumologicSecret(12), CheckOtelcolMetadataLogsInstall, CheckOtelcolMetadataMetricsInstall, CheckOtelcolEventsInstall, diff --git a/tests/integration/helm_ot_fluentbit_logs_test.go b/tests/integration/helm_ot_fluentbit_logs_test.go index edf2becead..82c8d2590e 100644 --- a/tests/integration/helm_ot_fluentbit_logs_test.go +++ b/tests/integration/helm_ot_fluentbit_logs_test.go @@ -6,7 +6,7 @@ import ( func Test_Helm_OT_FluentBit_Logs(t *testing.T) { installChecks := []featureCheck{ - CheckSumologicSecret(1), + CheckSumologicSecret(2), CheckOtelcolMetadataLogsInstall, CheckFluentBitInstall, } diff --git a/tests/integration/helm_otc_fips_metadata_installation_test.go b/tests/integration/helm_otc_fips_metadata_installation_test.go index c12a86b2e8..abd28e248e 100644 --- a/tests/integration/helm_otc_fips_metadata_installation_test.go +++ b/tests/integration/helm_otc_fips_metadata_installation_test.go @@ -13,7 +13,7 @@ func Test_Helm_Default_OT_FIPS(t *testing.T) { expectedMetrics = append(expectedMetrics, internal.TracingOtelcolMetrics...) installChecks := []featureCheck{ - CheckSumologicSecret(11), + CheckSumologicSecret(12), CheckOtelcolMetadataLogsInstall, CheckOtelcolMetadataMetricsInstall, CheckOtelcolEventsInstall, diff --git a/tests/integration/helm_otlp_test.go b/tests/integration/helm_otlp_test.go new file mode 100644 index 0000000000..d12487fd93 --- /dev/null +++ b/tests/integration/helm_otlp_test.go @@ -0,0 +1,20 @@ +package integration + +import ( + "testing" +) + +func Test_Helm_OTLP(t *testing.T) { + + installChecks := []featureCheck{ + CheckSumologicSecret(2), + CheckOtelcolMetadataLogsInstall, + CheckOtelcolLogsCollectorInstall, + } + + featInstall := GetInstallFeature(installChecks) + + featLogs := GetLogsFeature() + + testenv.Test(t, featInstall, featLogs) +} diff --git a/tests/integration/values/values_helm_otlp.yaml b/tests/integration/values/values_helm_otlp.yaml new file mode 100644 index 0000000000..59fa5c48b0 --- /dev/null +++ b/tests/integration/values/values_helm_otlp.yaml @@ -0,0 +1,9 @@ +sumologic: + metrics: + enabled: false + events: + enabled: false + logs: + sourceType: otlp + traces: + enabled: false