From 18901db46f6800923ded1c90a3e60f1e7c971036 Mon Sep 17 00:00:00 2001 From: Jonas Juselius Date: Mon, 23 Jun 2025 14:05:54 +0200 Subject: [PATCH] feat: add opentelemetry-collector helmfile setup --- .../opentelemetry-collector.yaml.gotmpl | 31 ++++++++ .../env-oceanbox.yaml.gotmpl | 4 + .../opentelemetry-collector/env.yaml.gotmpl | 4 + .../manifests/opentelemetry-collector.yaml | 38 +++++++++ .../values/values.yaml | 79 +++++++++++++++++++ 5 files changed, 156 insertions(+) create mode 100644 helmfile.d/opentelemetry-collector.yaml.gotmpl create mode 100644 values/opentelemetry-collector/env-oceanbox.yaml.gotmpl create mode 100644 values/opentelemetry-collector/env.yaml.gotmpl create mode 100644 values/opentelemetry-collector/manifests/opentelemetry-collector.yaml create mode 100644 values/opentelemetry-collector/values/values.yaml diff --git a/helmfile.d/opentelemetry-collector.yaml.gotmpl b/helmfile.d/opentelemetry-collector.yaml.gotmpl new file mode 100644 index 00000000..3229f8ff --- /dev/null +++ b/helmfile.d/opentelemetry-collector.yaml.gotmpl @@ -0,0 +1,31 @@ +bases: + - ../envs/environments.yaml.gotmpl + +repositories: +- name: open-telemetry + url: https://open-telemetry.github.io/opentelemetry-helm-charts + +commonLabels: + tier: system + +releases: +- name: manifests + namespace: otel + chart: manifests + condition: otel.enabled + missingFileHandler: Info + values: + - ../values/env.yaml + - ../values/env-{{ requiredEnv "ARGOCD_ENV_CLUSTER_NAME" }}.yaml + - ../values/opentelemtery-collector/env.yaml.gotmpl + - ../values/opentelemtery-collector/env-{{ requiredEnv "ARGOCD_ENV_CLUSTER_NAME" }}.yaml.gotmpl + hooks: + - events: [ prepare, cleanup ] + showlogs: true + command: ../bin/helmify + args: + - '{{`{{ if eq .Event.Name "prepare" }}build{{ else }}clean{{ end }}`}}' + - '{{`{{ .Release.Chart }}`}}' + - '{{`{{ .Environment.Name }}`}}' + - ../values/opentelemtery-collector/manifests + - manifests diff --git a/values/opentelemetry-collector/env-oceanbox.yaml.gotmpl b/values/opentelemetry-collector/env-oceanbox.yaml.gotmpl new file mode 100644 index 00000000..d5f60333 --- /dev/null +++ b/values/opentelemetry-collector/env-oceanbox.yaml.gotmpl @@ -0,0 +1,4 @@ +otel: + enabled: true + autosync: false + diff --git a/values/opentelemetry-collector/env.yaml.gotmpl b/values/opentelemetry-collector/env.yaml.gotmpl new file mode 100644 index 00000000..d5f60333 --- /dev/null +++ b/values/opentelemetry-collector/env.yaml.gotmpl @@ -0,0 +1,4 @@ +otel: + enabled: true + autosync: false + diff --git a/values/opentelemetry-collector/manifests/opentelemetry-collector.yaml b/values/opentelemetry-collector/manifests/opentelemetry-collector.yaml new file mode 100644 index 00000000..44e15119 --- /dev/null +++ b/values/opentelemetry-collector/manifests/opentelemetry-collector.yaml @@ -0,0 +1,38 @@ +{{- if .Values.clusterConfig.argo.enabled }} +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: opentelemetry-collector + namespace: argocd + annotations: + argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + destination: + namespace: otel + server: 'https://kubernetes.default.svc' + project: sys + syncPolicy: + # managedNamespaceMetadata: + # labels: + # component: aux + syncOptions: + - CreateNamespace=true + - ApplyOutOfSyncOnly=true + {{- if .Values.otel.autosync }} + automated: + prune: true + selfHeal: true + {{- end }} + sources: + - repoURL: 'https://open-telemetry.github.io/opentelemetry-helm-charts' + targetRevision: 0.107.0 + chart: opentelemetry-collector + helm: + valueFiles: + - $values/values/opentelemetry-collector/values.yaml + - repoURL: {{ .Values.clusterConfig.manifests }} + targetRevision: main + ref: values +{{- end }} diff --git a/values/opentelemetry-collector/values/values.yaml b/values/opentelemetry-collector/values/values.yaml new file mode 100644 index 00000000..f9f1f9a6 --- /dev/null +++ b/values/opentelemetry-collector/values/values.yaml @@ -0,0 +1,79 @@ +mode: deployment +image: + repository: otel/opentelemetry-collector-k8s +service: + type: LoadBalancer + loadBalancerIP: 10.255.241.12 +config: + receivers: + prometheus/collector: + config: + scrape_configs: + - job_name: 'opentelemetry-collector' + static_configs: + - targets: + - ${env:MY_POD_IP}:8888 + zipkin: + endpoint: ${env:MY_POD_IP}:9411 + exporters: + otlp: + endpoint: "tempo.tempo.svc:4317" + tls: + insecure: true + otlphttp/metrics: + endpoint: http://prom-prometheus.prometheus:9090/api/v1/otlp + tls: + insecure: true + otlphttp/logs: + endpoint: http://loki-write-headless.loki:3100/otlp + tls: + insecure: true + debug/metrics: + verbosity: detailed + debug/traces: + verbosity: detailed + debug/logs: + verbosity: detailed + service: + telemetry: + logs: + level: "info" + pipelines: + traces: + receivers: [otlp,zipkin] + processors: [batch] + exporters: [otlp] + # exporters: [otlphttp/traces,debug/traces] + metrics: + receivers: [otlp,prometheus/collector] + processors: [batch] + exporters: [otlphttp/metrics] + # exporters: [otlphttp/metrics,debug/metrics] + logs: + receivers: [otlp] + processors: [batch] + exporters: [otlphttp/logs] + # exporters: [otlphttp/logs,debug/logs] +ports: + metrics: + enabled: true +# presets: +# logsCollection: +# enabled: true +ingress: + enabled: false + annotations: + cert-manager.io/cluster-issuer: letsencrypt-production + nginx.ingress.kubernetes.io/ssl-redirect: "true" + oceanbox.io/expose: internal + ingressClassName: nginx + hosts: + - host: opentelemetry-collector.adm.oceanbox.io + paths: + - path: / + pathType: Prefix + port: 4318 + tls: + - secretName: collector-tls + hosts: + - opentelemetry-collector.adm.oceanbox.io