From 8d654ae2f6ae4a4a7da3898e17e63796f0df5c02 Mon Sep 17 00:00:00 2001 From: obs-gh-alexlew <153021320+obs-gh-alexlew@users.noreply.github.com> Date: Thu, 23 Jan 2025 10:07:09 -0800 Subject: [PATCH] feat: add forwarding daemonset and trace support (#300) --- charts/agent/Chart.lock | 7 +- charts/agent/Chart.yaml | 7 +- charts/agent/README.md | 94 +++++++++- .../templates/_cluster-events-config.tpl | 2 +- charts/agent/templates/_config-exporters.tpl | 15 ++ charts/agent/templates/_config.tpl | 7 + charts/agent/templates/_forwarder-config.tpl | 71 +++++++ .../agent/templates/forwarder-configmap.yaml | 10 + charts/agent/templates/secret.yaml | 3 + charts/agent/values.yaml | 177 +++++++++++++++++- 10 files changed, 382 insertions(+), 11 deletions(-) create mode 100644 charts/agent/templates/_forwarder-config.tpl create mode 100644 charts/agent/templates/forwarder-configmap.yaml diff --git a/charts/agent/Chart.lock b/charts/agent/Chart.lock index 70df8ec1..398ab365 100644 --- a/charts/agent/Chart.lock +++ b/charts/agent/Chart.lock @@ -11,5 +11,8 @@ dependencies: - name: opentelemetry-collector repository: https://open-telemetry.github.io/opentelemetry-helm-charts version: 0.101.1 -digest: sha256:992c9d9bc2191330bbf369cf227b5a251d82a7d021f82654a195b0a578d30e35 -generated: "2024-09-18T14:21:39.348893-07:00" +- name: opentelemetry-collector + repository: https://open-telemetry.github.io/opentelemetry-helm-charts + version: 0.101.1 +digest: sha256:3ea30bea8320d9130ecf4f26d28da530165685dcea15e3c7f39846f783a00406 +generated: "2025-01-21T13:16:08.897494-08:00" diff --git a/charts/agent/Chart.yaml b/charts/agent/Chart.yaml index 5f11fac0..68617729 100644 --- a/charts/agent/Chart.yaml +++ b/charts/agent/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: agent description: Chart to install K8s collection stack based on Observe Agent type: application -version: 0.37.0 +version: 0.38.0 appVersion: "1.1.0" dependencies: - name: opentelemetry-collector @@ -25,6 +25,11 @@ dependencies: repository: https://open-telemetry.github.io/opentelemetry-helm-charts alias: monitor condition: agent.selfMonitor.enabled + - name: opentelemetry-collector + version: 0.101.1 + repository: https://open-telemetry.github.io/opentelemetry-helm-charts + alias: forwarder + condition: node.forwarder.enabled maintainers: - name: Observe email: support@observeinc.com diff --git a/charts/agent/README.md b/charts/agent/README.md index 6cbb6744..9334143f 100644 --- a/charts/agent/README.md +++ b/charts/agent/README.md @@ -1,6 +1,6 @@ # agent -![Version: 0.37.0](https://img.shields.io/badge/Version-0.37.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.1.0](https://img.shields.io/badge/AppVersion-1.1.0-informational?style=flat-square) +![Version: 0.38.0](https://img.shields.io/badge/Version-0.38.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.1.0](https://img.shields.io/badge/AppVersion-1.1.0-informational?style=flat-square) > [!CAUTION] > This chart is under active development and is not meant to be installed yet. @@ -21,6 +21,7 @@ Chart to install K8s collection stack based on Observe Agent | https://open-telemetry.github.io/opentelemetry-helm-charts | cluster-metrics(opentelemetry-collector) | 0.101.1 | | https://open-telemetry.github.io/opentelemetry-helm-charts | node-logs-metrics(opentelemetry-collector) | 0.101.1 | | https://open-telemetry.github.io/opentelemetry-helm-charts | monitor(opentelemetry-collector) | 0.101.1 | +| https://open-telemetry.github.io/opentelemetry-helm-charts | forwarder(opentelemetry-collector) | 0.101.1 | ## Values @@ -192,6 +193,79 @@ Chart to install K8s collection stack based on Observe Agent | cluster.name | string | `"observe-agent-monitored-cluster"` | | | cluster.namespaceOverride.value | string | `"observe"` | | | cluster.uidOverride.value | string | `""` | | +| forwarder.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].key | string | `"observeinc.com/unschedulable"` | | +| forwarder.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].operator | string | `"DoesNotExist"` | | +| forwarder.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[1].key | string | `"kubernetes.io/os"` | | +| forwarder.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[1].operator | string | `"NotIn"` | | +| forwarder.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[1].values[0] | string | `"windows"` | | +| forwarder.clusterRole.create | bool | `false` | | +| forwarder.clusterRole.name | string | `"observe-agent-cluster-role"` | | +| forwarder.command.extraArgs[0] | string | `"start"` | | +| forwarder.command.extraArgs[1] | string | `"--config=/observe-agent-conf/observe-agent.yaml"` | | +| forwarder.command.extraArgs[2] | string | `"--otel-config=/conf/relay.yaml"` | | +| forwarder.command.name | string | `"observe-agent"` | | +| forwarder.configMap.create | bool | `false` | | +| forwarder.configMap.existingName | string | `"forwarder"` | | +| forwarder.extraEnvsFrom | list | `[]` | | +| forwarder.extraEnvs[0].name | string | `"OBSERVE_CLUSTER_NAME"` | | +| forwarder.extraEnvs[0].valueFrom.configMapKeyRef.key | string | `"name"` | | +| forwarder.extraEnvs[0].valueFrom.configMapKeyRef.name | string | `"cluster-name"` | | +| forwarder.extraEnvs[1].name | string | `"OBSERVE_CLUSTER_UID"` | | +| forwarder.extraEnvs[1].valueFrom.configMapKeyRef.key | string | `"id"` | | +| forwarder.extraEnvs[1].valueFrom.configMapKeyRef.name | string | `"cluster-info"` | | +| forwarder.extraEnvs[2].name | string | `"K8S_NODE_NAME"` | | +| forwarder.extraEnvs[2].valueFrom.fieldRef.fieldPath | string | `"spec.nodeName"` | | +| forwarder.extraEnvs[3].name | string | `"TOKEN"` | | +| forwarder.extraEnvs[3].valueFrom.secretKeyRef.key | string | `"OBSERVE_TOKEN"` | | +| forwarder.extraEnvs[3].valueFrom.secretKeyRef.name | string | `"agent-credentials"` | | +| forwarder.extraEnvs[3].valueFrom.secretKeyRef.optional | bool | `true` | | +| forwarder.extraEnvs[4].name | string | `"TRACE_TOKEN"` | | +| forwarder.extraEnvs[4].valueFrom.secretKeyRef.key | string | `"TRACE_TOKEN"` | | +| forwarder.extraEnvs[4].valueFrom.secretKeyRef.name | string | `"agent-credentials"` | | +| forwarder.extraEnvs[4].valueFrom.secretKeyRef.optional | bool | `true` | | +| forwarder.extraVolumeMounts[0].mountPath | string | `"/observe-agent-conf"` | | +| forwarder.extraVolumeMounts[0].name | string | `"observe-agent-deployment-config"` | | +| forwarder.extraVolumes[0].configMap.defaultMode | int | `420` | | +| forwarder.extraVolumes[0].configMap.items[0].key | string | `"relay"` | | +| forwarder.extraVolumes[0].configMap.items[0].path | string | `"observe-agent.yaml"` | | +| forwarder.extraVolumes[0].configMap.name | string | `"observe-agent"` | | +| forwarder.extraVolumes[0].name | string | `"observe-agent-deployment-config"` | | +| forwarder.image.pullPolicy | string | `"IfNotPresent"` | | +| forwarder.image.repository | string | `"observeinc/observe-agent"` | | +| forwarder.image.tag | string | `"1.6.0"` | | +| forwarder.initContainers[0].env[0].name | string | `"NAMESPACE"` | | +| forwarder.initContainers[0].env[0].valueFrom.fieldRef.fieldPath | string | `"metadata.namespace"` | | +| forwarder.initContainers[0].image | string | `"observeinc/kube-cluster-info:v0.11.1"` | | +| forwarder.initContainers[0].imagePullPolicy | string | `"Always"` | | +| forwarder.initContainers[0].name | string | `"kube-cluster-info"` | | +| forwarder.livenessProbe.httpGet.path | string | `"/status"` | | +| forwarder.livenessProbe.httpGet.port | int | `13133` | | +| forwarder.livenessProbe.initialDelaySeconds | int | `30` | | +| forwarder.livenessProbe.periodSeconds | int | `5` | | +| forwarder.mode | string | `"daemonset"` | | +| forwarder.nameOverride | string | `"forwarder"` | --------------------------------------- # Different for each deployment/daemonset # | +| forwarder.namespaceOverride | string | `"observe"` | | +| forwarder.networkPolicy.egressRules[0] | object | `{}` | | +| forwarder.networkPolicy.enabled | bool | `true` | | +| forwarder.podAnnotations.observe_monitor_path | string | `"/metrics"` | | +| forwarder.podAnnotations.observe_monitor_port | string | `"8888"` | | +| forwarder.podAnnotations.observe_monitor_purpose | string | `"observecollection"` | | +| forwarder.podAnnotations.observe_monitor_scrape | string | `"false"` | | +| forwarder.podAnnotations.observeinc_com_scrape | string | `"false"` | | +| forwarder.ports.metrics.containerPort | int | `8888` | | +| forwarder.ports.metrics.enabled | bool | `true` | | +| forwarder.ports.metrics.protocol | string | `"TCP"` | | +| forwarder.ports.metrics.servicePort | int | `8888` | | +| forwarder.readinessProbe.httpGet.path | string | `"/status"` | | +| forwarder.readinessProbe.httpGet.port | int | `13133` | | +| forwarder.readinessProbe.initialDelaySeconds | int | `30` | | +| forwarder.readinessProbe.periodSeconds | int | `5` | | +| forwarder.resources | object | `{"limits":{"memory":"256Mi"},"requests":{"cpu":"250m","memory":"256Mi"}}` | --------------------------------------- # Same for each deployment/daemonset # | +| forwarder.service.enabled | bool | `true` | | +| forwarder.service.type | string | `"ClusterIP"` | | +| forwarder.serviceAccount.create | bool | `false` | | +| forwarder.serviceAccount.name | string | `"observe-agent-service-account"` | | +| forwarder.tolerations | list | `[]` | | | monitor.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].key | string | `"observeinc.com/unschedulable"` | | | monitor.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].operator | string | `"DoesNotExist"` | | | monitor.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[1].key | string | `"kubernetes.io/os"` | | @@ -283,6 +357,10 @@ Chart to install K8s collection stack based on Observe Agent | node-logs-metrics.extraEnvs[3].valueFrom.secretKeyRef.key | string | `"OBSERVE_TOKEN"` | | | node-logs-metrics.extraEnvs[3].valueFrom.secretKeyRef.name | string | `"agent-credentials"` | | | node-logs-metrics.extraEnvs[3].valueFrom.secretKeyRef.optional | bool | `true` | | +| node-logs-metrics.extraEnvs[4].name | string | `"TRACES_TOKEN"` | | +| node-logs-metrics.extraEnvs[4].valueFrom.secretKeyRef.key | string | `"TRACES_TOKEN"` | | +| node-logs-metrics.extraEnvs[4].valueFrom.secretKeyRef.name | string | `"agent-credentials"` | | +| node-logs-metrics.extraEnvs[4].valueFrom.secretKeyRef.optional | bool | `true` | | | node-logs-metrics.extraVolumeMounts[0].mountPath | string | `"/observe-agent-conf"` | | | node-logs-metrics.extraVolumeMounts[0].name | string | `"observe-agent-deployment-config"` | | | node-logs-metrics.extraVolumeMounts[1].mountPath | string | `"/var/log/pods"` | | @@ -326,17 +404,21 @@ Chart to install K8s collection stack based on Observe Agent | node-logs-metrics.mode | string | `"daemonset"` | | | node-logs-metrics.nameOverride | string | `"node-logs-metrics"` | --------------------------------------- # Different for each deployment/daemonset # | | node-logs-metrics.namespaceOverride | string | `"observe"` | | -| node-logs-metrics.networkPolicy.egressRules[0] | object | `{}` | | -| node-logs-metrics.networkPolicy.enabled | bool | `true` | | | node-logs-metrics.podAnnotations.observe_monitor_path | string | `"/metrics"` | | | node-logs-metrics.podAnnotations.observe_monitor_port | string | `"8888"` | | | node-logs-metrics.podAnnotations.observe_monitor_purpose | string | `"observecollection"` | | | node-logs-metrics.podAnnotations.observe_monitor_scrape | string | `"true"` | | | node-logs-metrics.podAnnotations.observeinc_com_scrape | string | `"false"` | | +| node-logs-metrics.ports.jaeger-compact.enabled | bool | `false` | | +| node-logs-metrics.ports.jaeger-grpc.enabled | bool | `false` | | +| node-logs-metrics.ports.jaeger-thrift.enabled | bool | `false` | | | node-logs-metrics.ports.metrics.containerPort | int | `8888` | | | node-logs-metrics.ports.metrics.enabled | bool | `true` | | | node-logs-metrics.ports.metrics.protocol | string | `"TCP"` | | | node-logs-metrics.ports.metrics.servicePort | int | `8888` | | +| node-logs-metrics.ports.otlp-http.enabled | bool | `false` | | +| node-logs-metrics.ports.otlp.enabled | bool | `false` | | +| node-logs-metrics.ports.zipkin.enabled | bool | `false` | | | node-logs-metrics.readinessProbe.httpGet.path | string | `"/status"` | | | node-logs-metrics.readinessProbe.httpGet.port | int | `13133` | | | node-logs-metrics.readinessProbe.initialDelaySeconds | int | `30` | | @@ -361,6 +443,10 @@ Chart to install K8s collection stack based on Observe Agent | node.containers.metrics.enabled | bool | `true` | | | node.containers.metrics.interval | string | `"60s"` | | | node.enabled | bool | `true` | | +| node.forwarder.enabled | bool | `false` | | +| node.forwarder.logs.enabled | bool | `true` | | +| node.forwarder.metrics.enabled | bool | `true` | | +| node.forwarder.traces.enabled | bool | `true` | | | node.metrics.enabled | bool | `true` | | | node.metrics.fileSystem.excludeMountPoints | string | `"[\"/dev/*\",\"/proc/*\",\"/sys/*\",\"/run/k3s/containerd/*\",\"/var/lib/docker/*\",\"/var/lib/kubelet/*\",\"/snap/*\"]"` | | | node.metrics.fileSystem.rootPath | string | `"/hostfs"` | | @@ -371,3 +457,5 @@ Chart to install K8s collection stack based on Observe Agent | observe.entityToken.value | string | `""` | | | observe.token.create | bool | `false` | | | observe.token.value | string | `""` | | +| observe.traceToken.create | bool | `false` | | +| observe.traceToken.value | string | `""` | | diff --git a/charts/agent/templates/_cluster-events-config.tpl b/charts/agent/templates/_cluster-events-config.tpl index 87329cca..8504427e 100644 --- a/charts/agent/templates/_cluster-events-config.tpl +++ b/charts/agent/templates/_cluster-events-config.tpl @@ -452,4 +452,4 @@ service: {{- include "config.service.telemetry" . | nindent 2 }} - {{- end }} +{{- end }} diff --git a/charts/agent/templates/_config-exporters.tpl b/charts/agent/templates/_config-exporters.tpl index cc381844..e2e962d9 100644 --- a/charts/agent/templates/_config-exporters.tpl +++ b/charts/agent/templates/_config-exporters.tpl @@ -32,6 +32,21 @@ otlphttp/observe/entity: compression: zstd {{- end -}} +{{- define "config.exporters.otlphttp.observe.trace" -}} +otlphttp/observe/forward/trace: + endpoint: "{{ .Values.observe.collectionEndpoint.value | toString | trimSuffix "/" }}/v2/otel" + headers: + authorization: "Bearer ${env:TRACE_TOKEN}" + sending_queue: + enabled: {{ .Values.agent.config.global.exporters.sendingQueue.enabled }} + retry_on_failure: + enabled: {{ .Values.agent.config.global.exporters.retryOnFailure.enabled }} + initial_interval: {{ .Values.agent.config.global.exporters.retryOnFailure.initialInterval }} + max_interval: {{ .Values.agent.config.global.exporters.retryOnFailure.maxInterval }} + max_elapsed_time: {{ .Values.agent.config.global.exporters.retryOnFailure.maxElapsedTime }} + compression: zstd +{{- end -}} + {{- define "config.exporters.prometheusremotewrite" -}} prometheusremotewrite: endpoint: "{{ .Values.observe.collectionEndpoint.value | toString | trimSuffix "/" }}/v1/prometheus" diff --git a/charts/agent/templates/_config.tpl b/charts/agent/templates/_config.tpl index 888ce454..7caefb94 100644 --- a/charts/agent/templates/_config.tpl +++ b/charts/agent/templates/_config.tpl @@ -19,6 +19,13 @@ {{- toYaml $config | indent 2 }} {{- end }} +{{- define "observe.daemonset.applyForwarderConfig" -}} +{{- $values := deepCopy .Values }} +{{- $data := dict "Values" $values | mustMergeOverwrite (deepCopy .) }} +{{- $config := mustMergeOverwrite ( include "observe.daemonset.forwarder.config" $data | fromYaml ) ($values.agent.config.forwarder) -}} +{{- toYaml $config | indent 2 }} +{{- end }} + {{- define "observe.deployment.applyAgentMonitorConfig" -}} {{- $values := deepCopy .Values }} {{- $data := dict "Values" $values | mustMergeOverwrite (deepCopy .) }} diff --git a/charts/agent/templates/_forwarder-config.tpl b/charts/agent/templates/_forwarder-config.tpl new file mode 100644 index 00000000..f53729c0 --- /dev/null +++ b/charts/agent/templates/_forwarder-config.tpl @@ -0,0 +1,71 @@ +{{- define "observe.daemonset.forwarder.config" -}} + +extensions: +{{- include "config.extensions.health_check" . | nindent 2 }} + +exporters: +{{- include "config.exporters.debug" . | nindent 2 }} +{{- include "config.exporters.otlphttp.observe.base" . | nindent 2 }} +{{- include "config.exporters.otlphttp.observe.trace" . | nindent 2 }} + +receivers: + otlp/app-telemetry: + protocols: + grpc: + endpoint: ${env:MY_POD_IP}:4317 + http: + endpoint: ${env:MY_POD_IP}:4318 +processors: +{{- include "config.processors.memory_limiter" . | nindent 2 }} + +{{- include "config.processors.resource_detection.cloud" . | nindent 2 }} + +{{- include "config.processors.batch" . | nindent 2 }} + +{{- include "config.processors.attributes.k8sattributes" . | nindent 2 }} + +{{- include "config.processors.resource.observe_common" . | nindent 2 }} + # attributes to append to objects + attributes/debug_source_app_traces: + actions: + - action: insert + key: debug_source + value: app_traces + attributes/debug_source_app_logs: + actions: + - action: insert + key: debug_source + value: app_logs + attributes/debug_source_app_metrics: + actions: + - action: insert + key: debug_source + value: app_metrics + +{{- $traceExporters := (list "otlphttp/observe/forward/trace") -}} +{{- $logsMetricsExporters := (list "otlphttp/observe/base") -}} + +{{- if eq .Values.agent.config.global.debug.enabled true }} + {{- $traceExporters = concat $traceExporters ( list "debug/override" ) | uniq }} + {{- $logsMetricsExporters = concat $logsMetricsExporters ( list "debug/override" ) | uniq }} +{{- end }} + +service: + extensions: [health_check] + pipelines: + traces/observe-forward: + receivers: [otlp/app-telemetry] + processors: [memory_limiter, k8sattributes, batch, resourcedetection/cloud, resource/observe_common, attributes/debug_source_app_traces] + exporters: [{{ join ", " $traceExporters }}] + logs/observe-forward: + receivers: [otlp/app-telemetry] + processors: [memory_limiter, k8sattributes, batch, resourcedetection/cloud, resource/observe_common, attributes/debug_source_app_logs] + exporters: [{{ join ", " $logsMetricsExporters }}] + metrics/observe-forward: + receivers: [otlp/app-telemetry] + processors: [memory_limiter, k8sattributes, batch, resourcedetection/cloud, resource/observe_common, attributes/debug_source_app_metrics] + exporters: [{{ join ", " $logsMetricsExporters }}] + +{{- include "config.service.telemetry" . | nindent 2 }} + +{{- end }} diff --git a/charts/agent/templates/forwarder-configmap.yaml b/charts/agent/templates/forwarder-configmap.yaml new file mode 100644 index 00000000..0e272751 --- /dev/null +++ b/charts/agent/templates/forwarder-configmap.yaml @@ -0,0 +1,10 @@ +{{ if .Values.node.forwarder.enabled -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: forwarder + namespace: {{ template "observe-agent.namespace" . }} +data: + relay: | + {{- include "observe.daemonset.applyForwarderConfig" . | nindent 4 -}} +{{ end -}} diff --git a/charts/agent/templates/secret.yaml b/charts/agent/templates/secret.yaml index e4de345c..a34bfe35 100644 --- a/charts/agent/templates/secret.yaml +++ b/charts/agent/templates/secret.yaml @@ -11,4 +11,7 @@ data: {{- if .Values.observe.entityToken.create }} ENTITY_TOKEN: {{ .Values.observe.entityToken.value | b64enc | quote }} {{- end}} + {{- if .Values.observe.traceToken.create }} + TRACE_TOKEN: {{ .Values.observe.traceToken.value | b64enc | quote }} + {{- end}} {{- end}} diff --git a/charts/agent/values.yaml b/charts/agent/values.yaml index 4e7ac00c..da00d2dd 100644 --- a/charts/agent/values.yaml +++ b/charts/agent/values.yaml @@ -14,6 +14,9 @@ observe: value: "" # To use exporter use: false + traceToken: + create: false + value: "" cluster: # name given to your cluster @@ -76,6 +79,14 @@ node: metrics: enabled: true interval: 60s + forwarder: + enabled: false + traces: + enabled: true + metrics: + enabled: true + logs: + enabled: true application: # use this option to scrape prometheus metrics from pods @@ -462,10 +473,6 @@ node-logs-metrics: initialDelaySeconds: 30 periodSeconds: 5 - networkPolicy: - enabled: true - egressRules: [{}] - podAnnotations: { # This stops optional prometheus scrape config from picking up these pods observeinc_com_scrape: 'false', @@ -491,6 +498,18 @@ node-logs-metrics: tolerations: [] ports: + otlp: + enabled: false + otlp-http: + enabled: false + jaeger-compact: + enabled: false + jaeger-thrift: + enabled: false + jaeger-grpc: + enabled: false + zipkin: + enabled: false metrics: # The metrics port is disabled by default. However you need to enable the port # in order to use the ServiceMonitor (serviceMonitor.enabled) or PodMonitor (podMonitor.enabled). @@ -530,6 +549,12 @@ node-logs-metrics: name: agent-credentials key: OBSERVE_TOKEN optional: true + - name: TRACES_TOKEN + valueFrom: + secretKeyRef: + name: agent-credentials + key: TRACES_TOKEN + optional: true extraEnvsFrom: [] extraVolumes: - name: "observe-agent-deployment-config" @@ -703,3 +728,147 @@ monitor: - name: observe-agent-deployment-config mountPath: /observe-agent-conf # ----------------------------------------- # + +forwarder: + mode: daemonset + # ----------------------------------------- # + # Different for each deployment/daemonset # + nameOverride: "forwarder" + # !!! IMPORTANT !!! This needs to have same value as namespaceOverride in cluster above + namespaceOverride: "observe" + + configMap: + create: false + existingName: "forwarder" + # ----------------------------------------- # + + # ----------------------------------------- # + # Same for each deployment/daemonset # + resources: + requests: + cpu: 250m + memory: 256Mi + limits: + memory: 256Mi + + image: + repository: observeinc/observe-agent + tag: 1.6.0 + pullPolicy: IfNotPresent + + command: + name: "observe-agent" + extraArgs: ["start", "--config=/observe-agent-conf/observe-agent.yaml", "--otel-config=/conf/relay.yaml"] + + serviceAccount: + create: false + name: "observe-agent-service-account" + clusterRole: + create: false + name: "observe-agent-cluster-role" + + livenessProbe: + httpGet: + port: 13133 + path: /status + initialDelaySeconds: 30 + periodSeconds: 5 + + readinessProbe: + httpGet: + port: 13133 + path: /status + initialDelaySeconds: 30 + periodSeconds: 5 + + service: + enabled: true + type: ClusterIP + + networkPolicy: + enabled: true + egressRules: [{}] + + podAnnotations: { + # This stops optional prometheus scrape config from picking up these pods + observeinc_com_scrape: 'false', + observe_monitor_purpose: observecollection, + observe_monitor_scrape: 'false', + observe_monitor_path: '/metrics', + observe_monitor_port: '8888', + } + + # Standard anti-affinity rules will exclude any node labeled with observeinc.com/unschedulable or using windows os + # See helm-charts/examples/agent/affinity/README.md for more information + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: observeinc.com/unschedulable + operator: DoesNotExist + - key: kubernetes.io/os + operator: NotIn + values: [windows] + + tolerations: [] + + ports: + metrics: + # The metrics port is disabled by default. However you need to enable the port + # in order to use the ServiceMonitor (serviceMonitor.enabled) or PodMonitor (podMonitor.enabled). + enabled: true + containerPort: 8888 + servicePort: 8888 + protocol: TCP + # this init container provides the cluster uid (kube-system namespace) as config map + initContainers: + - name: kube-cluster-info + image: observeinc/kube-cluster-info:v0.11.1 + imagePullPolicy: Always + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + # extract clusteruid from configmap create by init container + extraEnvs: + - name: OBSERVE_CLUSTER_NAME + valueFrom: + configMapKeyRef: + name: cluster-name + key: name + - name: OBSERVE_CLUSTER_UID + valueFrom: + configMapKeyRef: + name: cluster-info + key: id + - name: K8S_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: TOKEN + valueFrom: + secretKeyRef: + name: agent-credentials + key: OBSERVE_TOKEN + optional: true + - name: TRACE_TOKEN + valueFrom: + secretKeyRef: + name: agent-credentials + key: TRACE_TOKEN + optional: true + extraEnvsFrom: [] + extraVolumes: + - name: "observe-agent-deployment-config" + configMap: + name: "observe-agent" + items: + - key: "relay" + path: "observe-agent.yaml" + defaultMode: 420 + extraVolumeMounts: + - name: observe-agent-deployment-config + mountPath: /observe-agent-conf + # ----------------------------------------- #