Skip to content

Commit

Permalink
feat: add forwarding daemonset and trace support (#300)
Browse files Browse the repository at this point in the history
  • Loading branch information
obs-gh-alexlew authored Jan 23, 2025
1 parent 53dbb64 commit 8d654ae
Show file tree
Hide file tree
Showing 10 changed files with 382 additions and 11 deletions.
7 changes: 5 additions & 2 deletions charts/agent/Chart.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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"
7 changes: 6 additions & 1 deletion charts/agent/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
94 changes: 91 additions & 3 deletions charts/agent/README.md
Original file line number Diff line number Diff line change
@@ -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.
Expand All @@ -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

Expand Down Expand Up @@ -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"` | |
Expand Down Expand Up @@ -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"` | |
Expand Down Expand Up @@ -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` | |
Expand All @@ -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"` | |
Expand All @@ -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 | `""` | |
2 changes: 1 addition & 1 deletion charts/agent/templates/_cluster-events-config.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -452,4 +452,4 @@ service:

{{- include "config.service.telemetry" . | nindent 2 }}

{{- end }}
{{- end }}
15 changes: 15 additions & 0 deletions charts/agent/templates/_config-exporters.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
7 changes: 7 additions & 0 deletions charts/agent/templates/_config.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -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 .) }}
Expand Down
71 changes: 71 additions & 0 deletions charts/agent/templates/_forwarder-config.tpl
Original file line number Diff line number Diff line change
@@ -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 }}
10 changes: 10 additions & 0 deletions charts/agent/templates/forwarder-configmap.yaml
Original file line number Diff line number Diff line change
@@ -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 -}}
3 changes: 3 additions & 0 deletions charts/agent/templates/secret.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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}}
Loading

0 comments on commit 8d654ae

Please # to comment.