# OpenTelemetry Collector — OTLP ingress point for app traces. Receives OTLP over # gRPC (4317) and HTTP (4318), batches, and exports to VictoriaTraces' OTLP endpoint. # Point your apps' OTEL_EXPORTER_OTLP_ENDPOINT at otel-collector.monitoring.svc:4317. apiVersion: v1 kind: ServiceAccount metadata: name: otel-collector namespace: monitoring --- apiVersion: v1 kind: ConfigMap metadata: name: otel-collector-config namespace: monitoring data: config.yaml: | receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 processors: memory_limiter: check_interval: 5s limit_percentage: 80 spike_limit_percentage: 25 batch: timeout: 5s exporters: otlphttp/victoriatraces: # VictoriaTraces (VTSingle CR) OTLP-over-HTTP ingestion endpoint. traces_endpoint: http://vtsingle-main.monitoring.svc:10428/insert/opentelemetry/v1/traces tls: insecure: true service: pipelines: traces: receivers: [otlp] processors: [memory_limiter, batch] exporters: [otlphttp/victoriatraces] telemetry: metrics: address: 0.0.0.0:8888 --- apiVersion: apps/v1 kind: Deployment metadata: name: otel-collector namespace: monitoring labels: app.kubernetes.io/name: otel-collector spec: replicas: 1 selector: matchLabels: app.kubernetes.io/name: otel-collector template: metadata: labels: app.kubernetes.io/name: otel-collector spec: serviceAccountName: otel-collector containers: - name: otel-collector # Pin to a current release; check https://github.com/open-telemetry/opentelemetry-collector-releases image: otel/opentelemetry-collector-contrib:0.119.0 args: ["--config=/etc/otel/config.yaml"] ports: - { name: otlp-grpc, containerPort: 4317 } - { name: otlp-http, containerPort: 4318 } - { name: metrics, containerPort: 8888 } volumeMounts: - name: config mountPath: /etc/otel resources: requests: cpu: 50m memory: 128Mi limits: cpu: 500m memory: 512Mi volumes: - name: config configMap: name: otel-collector-config --- apiVersion: v1 kind: Service metadata: name: otel-collector namespace: monitoring labels: app.kubernetes.io/name: otel-collector spec: selector: app.kubernetes.io/name: otel-collector ports: - { name: otlp-grpc, port: 4317, targetPort: 4317 } - { name: otlp-http, port: 4318, targetPort: 4318 } - { name: metrics, port: 8888, targetPort: 8888 } --- # Self-scrape the collector's own telemetry into VictoriaMetrics. apiVersion: operator.victoriametrics.com/v1beta1 kind: VMServiceScrape metadata: name: otel-collector namespace: monitoring labels: app.kubernetes.io/part-of: victoria-metrics spec: selector: matchLabels: app.kubernetes.io/name: otel-collector endpoints: - port: metrics