Dieser Blogbeitrag zeigt, wie OTLP-Metriken in einer Kubernetes-Umgebung, in der sowohl der Prometheus-Operator als auch der OpenTelemetry-Operator bereits installiert sind, an Prometheus 3 gesendet werden können.
Voraussetzungen
Im Kubernetes-Cluster müssen die folgenden Komponenten installiert sein:
- Prometheus 3 (mit aktiviertem OpenTelemetry-Empfangs-Endpunkt)
- OpenTelemetry Operator (zur Verwaltung von OpenTelemetry-Collector-Instanzen)
- Eine Beispielanwendung, die OTLP-Metriken erzeugt
Bereitstellen eines OpenTelemetry Collectors zum Exportieren von Metriken
Wir werden einen OpenTelemetry Collector so konfigurieren, dass er Anwendungsmetriken erfasst und an Prometheus 3 weiterleitet.
OpenTelemetry-Collector-Konfiguration in einer CRD
Anstatt eine ConfigMap zu verwenden, betten wir die Konfiguration direkt in die OpenTelemetryCollector-Custom Resource ein:
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
  name: otel-collector
  namespace: monitoring
spec:
  mode: deployment
  config: |
    receivers:
      otlp:
        protocols:
          grpc:
          http:
    processors:
      batch:
    exporters:
      prometheusremotewrite:
        endpoint: "http://prometheus-operated.monitoring.svc.cluster.local:9090/api/v1/otlp"
    service:
      pipelines:
        metrics:
          receivers: [otlp]
          processors: [batch]
          exporters: [prometheusremotewrite]
Konfiguration von Prometheus 3 zur Annahme von OTLP-Metriken über den Prometheus Operator
Um den OTLP-Endpunkt in Prometheus über den Prometheus Operator zu aktivieren, passen wir die Prometheus-Custom-Resource wie folgt an:
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: prometheus
  namespace: monitoring
spec:
  containers:
    - name: prometheus
      args:
        - "--web.enable-remote-write-receiver"
        - "--enable-feature=otlp-write-receiver"
  serviceMonitorSelector:
    matchLabels:
      team: frontend
  podMonitorSelector: {}
  resources:
    requests:
      memory: 400Mi
Diese Flags aktivieren den OTLP-Metrik-Endpunkt unter /api/v1/otlp.
Bereitstellen einer Beispielanwendung mit OTLP-Metriken
Wir werden eine einfache Beispielanwendung mit OpenTelemetry-Instrumentierung bereitstellen, die Metriken an den OpenTelemetry Collector sendet.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-app
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sample-app
  template:
    metadata:
      labels:
        app: sample-app
    spec:
      containers:
        - name: sample-app
          image: myorg/sample-app:latest
          ports:
            - containerPort: 8080
          env:
            - name: OTEL_EXPORTER_OTLP_ENDPOINT
              value: "http://otel-collector.monitoring.svc.cluster.local:4317"
Überprüfung der Metriken in Prometheus
Nachdem die Beispielanwendung bereitgestellt wurde, überprüfen Sie, ob die Metriken erfolgreich in Prometheus einfliessen:
- Zugriff auf die Prometheus-Benutzeroberfläche:
kubectl port-forward svc/prometheus-operated 9090 -n monitoring
- Wir navigieren zu http://localhost:9090und verwenden den Prometheus-Expression-Browser um die eingehenden OTLP-Metriken zu überprüfen.
Fazit
Mit dem OpenTelemetry-Endpunkt von Prometheus 3 wird die Integration von OTLP-Metriken in einen Kubernetes-basierten Observability-Stack deutlich vereinfacht. Dieses Setup ermöglicht es Teams, die leistungsstarken Telemetrie-Erfassungsfunktionen von OpenTelemetry zu nutzen und gleichzeitig Prometheus als zuverlässigen Backend-Speicher für Metriken und Abfragen weiter einzusetzen.
