From 6c05ed5cb5c06dbe5ee4b63d3ed50031319b170c Mon Sep 17 00:00:00 2001 From: Eugene Kirillov Date: Thu, 27 Feb 2025 22:09:42 -0800 Subject: [PATCH] OTAGENT-286 Add support for filelog receiver --- charts/datadog/CHANGELOG.md | 5 +++ charts/datadog/Chart.yaml | 2 +- charts/datadog/README.md | 4 +- .../ci/agent-otel-collector-logs-values.yaml | 38 ++++++++++++++++ ...t-otel-collector-volume-mounts-values.yaml | 43 +++++++++++++++++++ .../templates/_container-otel-agent.yaml | 19 ++++++++ .../templates/_daemonset-volumes-linux.yaml | 2 +- charts/datadog/templates/_helpers.tpl | 14 ++++++ charts/datadog/values.yaml | 14 ++++++ 9 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 charts/datadog/ci/agent-otel-collector-logs-values.yaml create mode 100644 charts/datadog/ci/agent-otel-collector-volume-mounts-values.yaml diff --git a/charts/datadog/CHANGELOG.md b/charts/datadog/CHANGELOG.md index 84a1c17ec..a6cb596be 100644 --- a/charts/datadog/CHANGELOG.md +++ b/charts/datadog/CHANGELOG.md @@ -1,5 +1,10 @@ # Datadog changelog +## 3.100.0 + +* Mount `datadog.otelCollector.logs.enabled` to support additional RBAC permissions required by OTel components that are not included by default with `otel-agent`. +* Add support for additional volume mounts in `otel-agent` via `agents.containers.otelAgent.volumeMounts`. + ## 3.99.0 * Add `datadog.otelCollector.rbac.create` to control creation additional ClusterRole for `otel-agent` required by Kubernetes Attributes processor. diff --git a/charts/datadog/Chart.yaml b/charts/datadog/Chart.yaml index aea08f036..eefcb5779 100644 --- a/charts/datadog/Chart.yaml +++ b/charts/datadog/Chart.yaml @@ -1,7 +1,7 @@ --- apiVersion: v1 name: datadog -version: 3.99.0 +version: 3.100.0 appVersion: "7" description: Datadog Agent keywords: diff --git a/charts/datadog/README.md b/charts/datadog/README.md index f8ff1e7d0..51db5d599 100644 --- a/charts/datadog/README.md +++ b/charts/datadog/README.md @@ -1,6 +1,6 @@ # Datadog -![Version: 3.99.0](https://img.shields.io/badge/Version-3.99.0-informational?style=flat-square) ![AppVersion: 7](https://img.shields.io/badge/AppVersion-7-informational?style=flat-square) +![Version: 3.100.0](https://img.shields.io/badge/Version-3.100.0-informational?style=flat-square) ![AppVersion: 7](https://img.shields.io/badge/AppVersion-7-informational?style=flat-square) [Datadog](https://www.datadoghq.com/) is a hosted infrastructure monitoring platform. This chart adds the Datadog Agent to all nodes in your cluster via a DaemonSet. It also optionally depends on the [kube-state-metrics chart](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-state-metrics). For more information about monitoring Kubernetes with Datadog, please refer to the [Datadog documentation website](https://docs.datadoghq.com/agent/basic_agent_usage/kubernetes/). @@ -487,6 +487,7 @@ helm install \ | agents.containers.otelAgent.ports | list | `[]` | Allows to specify extra ports (hostPorts for instance) for this container | | agents.containers.otelAgent.resources | object | `{}` | Resource requests and limits for the otel-agent container | | agents.containers.otelAgent.securityContext | object | `{}` | Allows you to overwrite the default container SecurityContext for the otel-agent container. | +| agents.containers.otelAgent.volumeMounts | list | `[]` | Specify additional volumes to mount in the otel-agent container | | agents.containers.processAgent.env | list | `[]` | Additional environment variables for the process-agent container | | agents.containers.processAgent.envDict | object | `{}` | Set environment variables specific to process-agent defined in a dict | | agents.containers.processAgent.envFrom | list | `[]` | Set environment variables specific to process-agent from configMaps and/or secrets | @@ -808,6 +809,7 @@ helm install \ | datadog.osReleasePath | string | `"/etc/os-release"` | Specify the path to your os-release file | | datadog.otelCollector.config | string | `nil` | OTel collector configuration | | datadog.otelCollector.enabled | bool | `false` | Enable the OTel Collector | +| datadog.otelCollector.logs.enabled | bool | `false` | Enable logs support in the OTel Collector. If true, checks OTel Collector config for filelog receiver and mounts additional volumes to collect containers and pods logs. | | datadog.otelCollector.ports | list | `[{"containerPort":"4317","name":"otel-grpc"},{"containerPort":"4318","name":"otel-http"}]` | Ports that OTel Collector is listening | | datadog.otelCollector.rbac.create | bool | `true` | If true, check OTel Collector config for k8sattributes processor and create required ClusterRole to access Kubernetes API | | datadog.otelCollector.rbac.rules | list | `[]` | A set of additional RBAC rules to apply to OTel Collector's ClusterRole | diff --git a/charts/datadog/ci/agent-otel-collector-logs-values.yaml b/charts/datadog/ci/agent-otel-collector-logs-values.yaml new file mode 100644 index 000000000..c94a3a539 --- /dev/null +++ b/charts/datadog/ci/agent-otel-collector-logs-values.yaml @@ -0,0 +1,38 @@ +targetSystem: "linux" +agents: + image: + repository: datadog/agent-dev + tag: nightly-ot-beta-main + doNotCheckTag: true + containers: + agent: + env: + - name: DD_HOSTNAME + value: "datadog" +datadog: + apiKey: "00000000000000000000000000000000" + appKey: "0000000000000000000000000000000000000000" + otelCollector: + enabled: true + logs: + enabled: true + config: | + receivers: + otlp: + filelog: + filelog/datadog: + exporters: + datadog: + api: + key: "00000000000000000000000000000000" + service: + pipelines: + traces: + receivers: [otlp] + exporters: [datadog] + metrics: + receivers: [otlp] + exporters: [datadog] + logs: + receivers: [filelog] + exporters: [datadog] diff --git a/charts/datadog/ci/agent-otel-collector-volume-mounts-values.yaml b/charts/datadog/ci/agent-otel-collector-volume-mounts-values.yaml new file mode 100644 index 000000000..b6b198365 --- /dev/null +++ b/charts/datadog/ci/agent-otel-collector-volume-mounts-values.yaml @@ -0,0 +1,43 @@ +targetSystem: "linux" +agents: + image: + repository: datadog/agent-dev + tag: nightly-ot-beta-main + doNotCheckTag: true + containers: + agent: + env: + - name: DD_HOSTNAME + value: "datadog" + otelAgent: + volumeMounts: + - name: logscustompath + mountPath: /var/log/custom + readOnly: true + volumes: + - hostPath: + path: /var/log/custom + name: logscustompath +datadog: + apiKey: "00000000000000000000000000000000" + appKey: "0000000000000000000000000000000000000000" + otelCollector: + enabled: true + config: | + receivers: + otlp: + exporters: + datadog: + api: + key: "00000000000000000000000000000000" + service: + pipelines: + traces: + receivers: [otlp] + exporters: [datadog] + metrics: + receivers: [otlp] + exporters: [datadog] + logs: + receivers: [otlp] + exporters: [datadog] diff --git a/charts/datadog/templates/_container-otel-agent.yaml b/charts/datadog/templates/_container-otel-agent.yaml index 67793f402..c7fa0f8be 100644 --- a/charts/datadog/templates/_container-otel-agent.yaml +++ b/charts/datadog/templates/_container-otel-agent.yaml @@ -73,6 +73,22 @@ - name: dsdsocket mountPath: {{ (dir .Values.datadog.dogstatsd.socketPath) }} readOnly: true + {{- if and .Values.datadog.otelCollector.logs.enabled (eq (include "should-mount-logs-for-otel-agent" .) "true") }} + - name: logpodpath + mountPath: /var/log/pods + mountPropagation: {{ .Values.datadog.hostVolumeMountPropagation }} + readOnly: true + - name: logscontainerspath + mountPath: /var/log/containers + mountPropagation: {{ .Values.datadog.hostVolumeMountPropagation }} + readOnly: true + {{- if and (not .Values.datadog.criSocketPath) (not .Values.providers.gke.gdc) }} + - name: logdockercontainerpath + mountPath: /var/lib/docker/containers + mountPropagation: {{ .Values.datadog.hostVolumeMountPropagation }} + readOnly: true + {{- end }} + {{- end }} {{- end }} {{- include "container-crisocket-volumemounts" . | nindent 4 }} {{- include "container-cloudinit-volumemounts" . | nindent 4 }} @@ -82,4 +98,7 @@ {{- if .Values.agents.volumeMounts }} {{ toYaml .Values.agents.volumeMounts | indent 4 }} {{- end }} +{{- if .Values.agents.containers.otelAgent.volumeMounts }} +{{ toYaml .Values.agents.containers.otelAgent.volumeMounts | indent 4 }} +{{- end }} {{- end -}} diff --git a/charts/datadog/templates/_daemonset-volumes-linux.yaml b/charts/datadog/templates/_daemonset-volumes-linux.yaml index c4238986c..a69c4921c 100644 --- a/charts/datadog/templates/_daemonset-volumes-linux.yaml +++ b/charts/datadog/templates/_daemonset-volumes-linux.yaml @@ -198,7 +198,7 @@ name: runtimesocketdir {{- end }} {{- end }} -{{- if or .Values.datadog.logs.enabled .Values.datadog.logsEnabled }} +{{- if or .Values.datadog.logs.enabled .Values.datadog.logsEnabled .Values.datadog.otelCollector.logs.enabled }} - hostPath: path: {{ template "datadog.hostMountRoot" . }}/logs name: pointerdir diff --git a/charts/datadog/templates/_helpers.tpl b/charts/datadog/templates/_helpers.tpl index cca02b56d..d82ee4221 100644 --- a/charts/datadog/templates/_helpers.tpl +++ b/charts/datadog/templates/_helpers.tpl @@ -167,6 +167,20 @@ Return true if k8sattributes RBAC rules should be added to the OTel Agent Cluste {{- $return }} {{- end -}} +{{/* +Return true if conatiner and pod logs volumes should be mounted in the OTel Agent container +*/}} +{{- define "should-mount-logs-for-otel-agent" -}} +{{- $return := false }} +{{- $config := .Values.datadog.otelCollector.config | default "" | fromYaml }} +{{- range $key, $val := $config.receivers }} + {{- if hasPrefix "filelog" $key }} + {{- $return = true }} + {{- end }} +{{- end }} +{{- $return }} +{{- end -}} + {{/* Return secret name to be used based on provided values. */}} diff --git a/charts/datadog/values.yaml b/charts/datadog/values.yaml index c67b685b3..96b933807 100644 --- a/charts/datadog/values.yaml +++ b/charts/datadog/values.yaml @@ -611,6 +611,13 @@ datadog: # resources: ["pods", "nodes"] # verbs: ["get", "list", "watch"] + ## Provide OTel Collector logs configuration + logs: + # datadog.otelCollector.logs.enabled -- Enable logs support in the OTel Collector. + # If true, checks OTel Collector config for filelog receiver and mounts additional volumes to collect containers + # and pods logs. + enabled: false + ## Continuous Profiler configuration ## ## Continuous Profiler is disabled by default and can be enabled by setting the `enabled` field to @@ -1824,6 +1831,13 @@ agents: # agents.containers.otelAgent.ports -- Allows to specify extra ports (hostPorts for instance) for this container ports: [] + + # agents.containers.otelAgent.volumeMounts -- Specify additional volumes to mount in the otel-agent container + volumeMounts: [] + # - name: + # mountPath: + # readOnly: true + traceAgent: # agents.containers.traceAgent.env -- Additional environment variables for the trace-agent container env: []