apiVersion: v1 kind: ConfigMap metadata: name: otel-collector-config namespace: tracing data: config.yaml: | receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 processors: batch: timeout: 1s send_batch_size: 1024 # Add service.namespace attribute if missing attributes: actions: - key: deployment.environment value: homelab action: upsert exporters: otlp: endpoint: tempo.tracing.svc.cluster.local:4317 tls: insecure: true # Debug logging for troubleshooting debug: verbosity: basic extensions: health_check: endpoint: 0.0.0.0:13133 service: extensions: [health_check] pipelines: traces: receivers: [otlp] processors: [batch, attributes] exporters: [otlp, debug] --- apiVersion: apps/v1 kind: Deployment metadata: name: otel-collector namespace: tracing labels: app.kubernetes.io/name: otel-collector spec: replicas: 2 selector: matchLabels: app.kubernetes.io/name: otel-collector template: metadata: labels: app.kubernetes.io/name: otel-collector annotations: reloader.stakater.com/auto: "true" spec: securityContext: runAsNonRoot: true runAsUser: 10001 containers: - name: collector image: otel/opentelemetry-collector-contrib:0.111.0 args: - --config=/etc/otel/config.yaml ports: - name: otlp-grpc containerPort: 4317 protocol: TCP - name: otlp-http containerPort: 4318 protocol: TCP - name: health containerPort: 13133 protocol: TCP volumeMounts: - name: config mountPath: /etc/otel resources: requests: cpu: 50m memory: 128Mi limits: cpu: 200m memory: 256Mi readinessProbe: httpGet: path: / port: health initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: httpGet: path: / port: health initialDelaySeconds: 10 periodSeconds: 30 volumes: - name: config configMap: name: otel-collector-config --- apiVersion: v1 kind: Service metadata: name: otel-collector namespace: tracing labels: app.kubernetes.io/name: otel-collector spec: type: ClusterIP ports: - name: otlp-grpc port: 4317 targetPort: otlp-grpc - name: otlp-http port: 4318 targetPort: otlp-http - name: health port: 13133 targetPort: health selector: app.kubernetes.io/name: otel-collector