--- apiVersion: v1 kind: ConfigMap metadata: name: otel-collector-config namespace: monitoring data: otel-collector-config.yaml: | extensions: health_check: endpoint: 0.0.0.0:13133 receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 processors: batch: timeout: 10s send_batch_size: 1024 # Memory limiter to prevent OOM memory_limiter: check_interval: 1s limit_mib: 512 spike_limit_mib: 128 exporters: # Export metrics to Prometheus prometheus: endpoint: "0.0.0.0:8889" namespace: otelcol const_labels: source: otel-collector # Export to SigNoz otlp/signoz: endpoint: "signoz-query-service.monitoring.svc.cluster.local:8080" tls: insecure: true # Logging exporter for debugging traces and logs logging: loglevel: info sampling_initial: 5 sampling_thereafter: 200 service: extensions: [health_check] pipelines: # Traces pipeline: receive -> process -> export to SigNoz traces: receivers: [otlp] processors: [memory_limiter, batch] exporters: [otlp/signoz, logging] # Metrics pipeline: receive -> process -> export to both Prometheus and SigNoz metrics: receivers: [otlp] processors: [memory_limiter, batch] exporters: [prometheus, otlp/signoz] # Logs pipeline: receive -> process -> export to SigNoz logs: receivers: [otlp] processors: [memory_limiter, batch] exporters: [otlp/signoz, logging] --- apiVersion: apps/v1 kind: Deployment metadata: name: otel-collector namespace: monitoring labels: app: otel-collector spec: replicas: 1 selector: matchLabels: app: otel-collector template: metadata: labels: app: otel-collector spec: containers: - name: otel-collector image: otel/opentelemetry-collector-contrib:0.91.0 args: - --config=/conf/otel-collector-config.yaml ports: - containerPort: 4317 protocol: TCP name: otlp-grpc - containerPort: 4318 protocol: TCP name: otlp-http - containerPort: 8889 protocol: TCP name: prometheus - containerPort: 13133 protocol: TCP name: health-check volumeMounts: - name: otel-collector-config mountPath: /conf resources: requests: memory: "256Mi" cpu: "100m" limits: memory: "512Mi" cpu: "500m" livenessProbe: httpGet: path: / port: 13133 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: / port: 13133 initialDelaySeconds: 5 periodSeconds: 5 volumes: - name: otel-collector-config configMap: name: otel-collector-config items: - key: otel-collector-config.yaml path: otel-collector-config.yaml --- apiVersion: v1 kind: Service metadata: name: otel-collector namespace: monitoring labels: app: otel-collector annotations: prometheus.io/scrape: "true" prometheus.io/port: "8889" prometheus.io/path: "/metrics" spec: type: ClusterIP ports: - port: 4317 targetPort: 4317 protocol: TCP name: otlp-grpc - port: 4318 targetPort: 4318 protocol: TCP name: otlp-http - port: 8889 targetPort: 8889 protocol: TCP name: prometheus selector: app: otel-collector