{{- define "opentelemetry-collector.baseConfig" -}} {{- if .Values.alternateConfig }} {{- .Values.alternateConfig | toYaml }} {{- else}} {{- .Values.config | toYaml }} {{- end }} {{- end }} {{/* Build config file for daemonset OpenTelemetry Collector */}} {{- define "opentelemetry-collector.daemonsetConfig" -}} {{- $values := deepCopy .Values }} {{- $data := dict "Values" $values | mustMergeOverwrite (deepCopy .) }} {{- $config := include "opentelemetry-collector.baseConfig" $data | fromYaml }} {{- if .Values.presets.logsCollection.enabled }} {{- $config = (include "opentelemetry-collector.applyLogsCollectionConfig" (dict "Values" $data "config" $config) | fromYaml) }} {{- end }} {{- if .Values.presets.hostMetrics.enabled }} {{- $config = (include "opentelemetry-collector.applyHostMetricsConfig" (dict "Values" $data "config" $config) | fromYaml) }} {{- end }} {{- if .Values.presets.kubeletMetrics.enabled }} {{- $config = (include "opentelemetry-collector.applyKubeletMetricsConfig" (dict "Values" $data "config" $config) | fromYaml) }} {{- end }} {{- if .Values.presets.kubernetesAttributes.enabled }} {{- $config = (include "opentelemetry-collector.applyKubernetesAttributesConfig" (dict "Values" $data "config" $config) | fromYaml) }} {{- end }} {{- if .Values.presets.clusterMetrics.enabled }} {{- $config = (include "opentelemetry-collector.applyClusterMetricsConfig" (dict "Values" $data "config" $config) | fromYaml) }} {{- end }} {{- tpl (toYaml $config) . }} {{- end }} {{/* Build config file for deployment OpenTelemetry Collector */}} {{- define "opentelemetry-collector.deploymentConfig" -}} {{- $values := deepCopy .Values }} {{- $data := dict "Values" $values | mustMergeOverwrite (deepCopy .) }} {{- $config := include "opentelemetry-collector.baseConfig" $data | fromYaml }} {{- if .Values.presets.logsCollection.enabled }} {{- $config = (include "opentelemetry-collector.applyLogsCollectionConfig" (dict "Values" $data "config" $config) | fromYaml) }} {{- end }} {{- if .Values.presets.hostMetrics.enabled }} {{- $config = (include "opentelemetry-collector.applyHostMetricsConfig" (dict "Values" $data "config" $config) | fromYaml) }} {{- end }} {{- if .Values.presets.kubeletMetrics.enabled }} {{- $config = (include "opentelemetry-collector.applyKubeletMetricsConfig" (dict "Values" $data "config" $config) | fromYaml) }} {{- end }} {{- if .Values.presets.kubernetesAttributes.enabled }} {{- $config = (include "opentelemetry-collector.applyKubernetesAttributesConfig" (dict "Values" $data "config" $config) | fromYaml) }} {{- end }} {{- if .Values.presets.kubernetesEvents.enabled }} {{- $config = (include "opentelemetry-collector.applyKubernetesEventsConfig" (dict "Values" $data "config" $config) | fromYaml) }} {{- end }} {{- if .Values.presets.clusterMetrics.enabled }} {{- $config = (include "opentelemetry-collector.applyClusterMetricsConfig" (dict "Values" $data "config" $config) | fromYaml) }} {{- end }} {{- tpl (toYaml $config) . }} {{- end }} {{- define "opentelemetry-collector.applyHostMetricsConfig" -}} {{- $config := mustMergeOverwrite (dict "service" (dict "pipelines" (dict "metrics" (dict "receivers" list)))) (include "opentelemetry-collector.hostMetricsConfig" .Values | fromYaml) .config }} {{- $_ := set $config.service.pipelines.metrics "receivers" (append $config.service.pipelines.metrics.receivers "hostmetrics" | uniq) }} {{- $config | toYaml }} {{- end }} {{- define "opentelemetry-collector.hostMetricsConfig" -}} receivers: hostmetrics: root_path: /hostfs collection_interval: 10s scrapers: cpu: load: memory: disk: filesystem: exclude_mount_points: mount_points: - /dev/* - /proc/* - /sys/* - /run/k3s/containerd/* - /var/lib/docker/* - /var/lib/kubelet/* - /snap/* match_type: regexp exclude_fs_types: fs_types: - autofs - binfmt_misc - bpf - cgroup2 - configfs - debugfs - devpts - devtmpfs - fusectl - hugetlbfs - iso9660 - mqueue - nsfs - overlay - proc - procfs - pstore - rpc_pipefs - securityfs - selinuxfs - squashfs - sysfs - tracefs match_type: strict network: {{- end }} {{- define "opentelemetry-collector.applyClusterMetricsConfig" -}} {{- $config := mustMergeOverwrite (dict "service" (dict "pipelines" (dict "metrics" (dict "receivers" list)))) (include "opentelemetry-collector.clusterMetricsConfig" .Values | fromYaml) .config }} {{- $_ := set $config.service.pipelines.metrics "receivers" (append $config.service.pipelines.metrics.receivers "k8s_cluster" | uniq) }} {{- $config | toYaml }} {{- end }} {{- define "opentelemetry-collector.clusterMetricsConfig" -}} receivers: k8s_cluster: collection_interval: 10s {{- end }} {{- define "opentelemetry-collector.applyKubeletMetricsConfig" -}} {{- $config := mustMergeOverwrite (dict "service" (dict "pipelines" (dict "metrics" (dict "receivers" list)))) (include "opentelemetry-collector.kubeletMetricsConfig" .Values | fromYaml) .config }} {{- $_ := set $config.service.pipelines.metrics "receivers" (append $config.service.pipelines.metrics.receivers "kubeletstats" | uniq) }} {{- $config | toYaml }} {{- end }} {{- define "opentelemetry-collector.kubeletMetricsConfig" -}} receivers: kubeletstats: collection_interval: 20s auth_type: "serviceAccount" endpoint: "${env:K8S_NODE_NAME}:10250" {{- end }} {{- define "opentelemetry-collector.applyLogsCollectionConfig" -}} {{- $config := mustMergeOverwrite (dict "service" (dict "pipelines" (dict "logs" (dict "receivers" list)))) (include "opentelemetry-collector.logsCollectionConfig" .Values | fromYaml) .config }} {{- $_ := set $config.service.pipelines.logs "receivers" (append $config.service.pipelines.logs.receivers "filelog" | uniq) }} {{- if .Values.Values.presets.logsCollection.storeCheckpoints}} {{- $configExtensions := mustMergeOverwrite (dict "service" (dict "extensions" list)) $config }} {{- $_ := set $config.service "extensions" (append $configExtensions.service.extensions "file_storage" | uniq) }} {{- end }} {{- $config | toYaml }} {{- end }} {{- define "opentelemetry-collector.logsCollectionConfig" -}} {{- if .Values.presets.logsCollection.storeCheckpoints }} extensions: file_storage: directory: /var/lib/otelcol {{- end }} receivers: filelog: include: [ /var/log/pods/*/*/*.log ] {{- if .Values.presets.logsCollection.includeCollectorLogs }} exclude: [] {{- else }} # Exclude collector container's logs. The file format is /var/log/pods/__//.log exclude: [ /var/log/pods/{{ include "opentelemetry-collector.namespace" . }}_{{ include "opentelemetry-collector.fullname" . }}*_*/{{ include "opentelemetry-collector.lowercase_chartname" . }}/*.log ] {{- end }} start_at: end retry_on_failure: enabled: true {{- if .Values.presets.logsCollection.storeCheckpoints}} storage: file_storage {{- end }} include_file_path: true include_file_name: false operators: # parse container logs - type: container id: container-parser max_log_size: {{ $.Values.presets.logsCollection.maxRecombineLogSize }} {{- end }} {{- define "opentelemetry-collector.applyKubernetesAttributesConfig" -}} {{- $config := mustMergeOverwrite (include "opentelemetry-collector.kubernetesAttributesConfig" .Values | fromYaml) .config }} {{- if $config.service.pipelines.logs }} {{- $config = mustMergeOverwrite (dict "service" (dict "pipelines" (dict "logs" (dict "processors" list)))) $config }} {{- if not (has "k8sattributes" $config.service.pipelines.logs.processors) }} {{- $_ := set $config.service.pipelines.logs "processors" (prepend $config.service.pipelines.logs.processors "k8sattributes" | uniq) }} {{- end }} {{- end }} {{- if and $config.service.pipelines.metrics }} {{- $config = mustMergeOverwrite (dict "service" (dict "pipelines" (dict "metrics" (dict "processors" list)))) $config }} {{- if not (has "k8sattributes" $config.service.pipelines.metrics.processors) }} {{- $_ := set $config.service.pipelines.metrics "processors" (prepend $config.service.pipelines.metrics.processors "k8sattributes" | uniq) }} {{- end }} {{- end }} {{- if and $config.service.pipelines.traces }} {{- $config = mustMergeOverwrite (dict "service" (dict "pipelines" (dict "traces" (dict "processors" list)))) $config }} {{- if not (has "k8sattributes" $config.service.pipelines.traces.processors) }} {{- $_ := set $config.service.pipelines.traces "processors" (prepend $config.service.pipelines.traces.processors "k8sattributes" | uniq) }} {{- end }} {{- end }} {{- $config | toYaml }} {{- end }} {{- define "opentelemetry-collector.kubernetesAttributesConfig" -}} processors: k8sattributes: {{- if eq .Values.mode "daemonset" }} filter: node_from_env_var: K8S_NODE_NAME {{- end }} passthrough: false pod_association: - sources: - from: resource_attribute name: k8s.pod.ip - sources: - from: resource_attribute name: k8s.pod.uid - sources: - from: connection extract: metadata: - "k8s.namespace.name" - "k8s.deployment.name" - "k8s.statefulset.name" - "k8s.daemonset.name" - "k8s.cronjob.name" - "k8s.job.name" - "k8s.node.name" - "k8s.pod.name" - "k8s.pod.uid" - "k8s.pod.start_time" {{- if .Values.presets.kubernetesAttributes.extractAllPodLabels }} labels: - tag_name: $$1 key_regex: (.*) from: pod {{- end }} {{- if .Values.presets.kubernetesAttributes.extractAllPodAnnotations }} annotations: - tag_name: $$1 key_regex: (.*) from: pod {{- end }} {{- end }} {{/* Build the list of port for service */}} {{- define "opentelemetry-collector.servicePortsConfig" -}} {{- $ports := deepCopy .Values.ports }} {{- range $key, $port := $ports }} {{- if $port.enabled }} - name: {{ $key }} port: {{ $port.servicePort }} targetPort: {{ $port.containerPort }} protocol: {{ $port.protocol }} {{- if $port.appProtocol }} appProtocol: {{ $port.appProtocol }} {{- end }} {{- if $port.nodePort }} nodePort: {{ $port.nodePort }} {{- end }} {{- end }} {{- end }} {{- end }} {{/* Build the list of port for pod */}} {{- define "opentelemetry-collector.podPortsConfig" -}} {{- $ports := deepCopy .Values.ports }} {{- range $key, $port := $ports }} {{- if $port.enabled }} - name: {{ $key }} containerPort: {{ $port.containerPort }} protocol: {{ $port.protocol }} {{- if and $.isAgent $port.hostPort }} hostPort: {{ $port.hostPort }} {{- end }} {{- end }} {{- end }} {{- end }} {{- define "opentelemetry-collector.applyKubernetesEventsConfig" -}} {{- $config := mustMergeOverwrite (dict "service" (dict "pipelines" (dict "logs" (dict "receivers" list)))) (include "opentelemetry-collector.kubernetesEventsConfig" .Values | fromYaml) .config }} {{- $_ := set $config.service.pipelines.logs "receivers" (append $config.service.pipelines.logs.receivers "k8sobjects" | uniq) }} {{- $config | toYaml }} {{- end }} {{- define "opentelemetry-collector.kubernetesEventsConfig" -}} receivers: k8sobjects: objects: - name: events mode: "watch" group: "events.k8s.io" exclude_watch_type: - "DELETED" {{- end }}