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:9090
und 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.