# OpenTelemetry Collector Helm Values # Chart: https://github.com/open-telemetry/opentelemetry-helm-charts # # Architecture: # - DaemonSet mode: one collector per node for efficient data collection # - OTLP receiver for traces, metrics, and logs # - Filelog receiver for container logs (replaces Promtail) # - Prometheus receiver for metrics scraping (replaces Prometheus scrape) # - Exports to: Tempo (traces), Prometheus (metrics), Loki (logs) # # Pipeline: # Applications → OTel Collector → Tempo/Prometheus/Loki → Grafana # ============================================================================= # Image Configuration # ============================================================================= image: repository: otel/opentelemetry-collector-contrib # ============================================================================= # Deployment Mode # ============================================================================= mode: daemonset # ============================================================================= # Resource Limits (increased for log + metrics collection) # ============================================================================= resources: requests: cpu: 50m memory: 512Mi limits: memory: 512Mi # ============================================================================= # Environment Variables # ============================================================================= extraEnvs: - name: K8S_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: K8S_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: K8S_POD_IP valueFrom: fieldRef: fieldPath: status.podIP # ============================================================================= # Extra Volumes for Log Collection # ============================================================================= extraVolumes: - name: varlogpods hostPath: path: /var/log/pods - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers extraVolumeMounts: - name: varlogpods mountPath: /var/log/pods readOnly: true - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true # ============================================================================= # Ports # ============================================================================= ports: otlp: enabled: true containerPort: 4317 servicePort: 4317 hostPort: 4317 protocol: TCP otlp-http: enabled: true containerPort: 4318 servicePort: 4318 hostPort: 4318 protocol: TCP metrics: enabled: true containerPort: 8888 servicePort: 8888 protocol: TCP # ============================================================================= # OpenTelemetry Collector Configuration # ============================================================================= config: # --------------------------------------------------------------------------- # Receivers - what data the collector accepts # --------------------------------------------------------------------------- receivers: # OTLP receiver for application telemetry otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 # Filelog receiver for container logs (replaces Promtail) filelog: include: - /var/log/pods/*/*/*.log exclude: # Exclude collector's own logs to prevent feedback loop - /var/log/pods/opentelemetry_opentelemetry-collector*/*/*.log start_at: end include_file_path: true include_file_name: false operators: # Route based on log format - type: router id: get-format routes: - output: parser-docker expr: 'body matches "^\\{"' - output: parser-containerd expr: 'body matches "^[^ Z]+Z"' default: parser-containerd # Docker JSON format parser - type: json_parser id: parser-docker output: extract-metadata-from-filepath timestamp: parse_from: attributes.time layout: '%Y-%m-%dT%H:%M:%S.%LZ' # Containerd/CRI format parser - type: regex_parser id: parser-containerd regex: '^(?P