Einführung
Beobachtbarkeit ist für produktive ML‑Dienste essenziell. Die folgenden Schritte zeigen das Erfassen von Metriken mit Prometheus, die Visualisierung in Grafana und das Einrichten einfacher Alarmregeln.
Voraussetzungen
- Linux‑Server oder Docker‑Umgebung
- Zugriff auf die Ports 9090 (Prometheus) und 3000 (Grafana)
- Eine laufende HTTP‑API (z. B. FastAPI) — Beispiele nutzen
:8000
Hinweis: Befehle werden in
bash
‑Blöcken angegeben; ein Nicht‑Root‑Benutzer mitsudo
wird vorausgesetzt.
Schritt 1 — Prometheus starten und Ziel definieren
Prometheus ist ein Server, der Zeitreihenmetriken in Intervallen abruft (scrape). Erstellen Sie zunächst eine Konfiguration, die Ihren Dienst als Target hinzufügt.
Konfiguration (prometheus.yml):
global:
scrape_interval: 15s
scrape_configs:
- job_name: "ml-service"
metrics_path: /metrics
static_configs:
- targets: ["host.docker.internal:8000"] # Unter Linux ggf. localhost:8000 verwenden
Prometheus starten:
docker run -d --name prom -p 9090:9090 -v "$PWD/prometheus.yml:/etc/prometheus/prometheus.yml" prom/prometheus
Prüfen:
curl -s localhost:9090/-/ready # Erwartet 200 OK
Schritt 2 — Prometheus‑Exporter in Ihre App integrieren (FastAPI‑Beispiel)
Ihr Dienst sollte Prometheus‑Metriken unter /metrics
bereitstellen. Das folgende Beispiel sammelt Anfragenanzahl und Latenz.
Installation:
python -m venv .venv && source .venv/bin/activate
pip install fastapi uvicorn prometheus-client
App (app.py):
from fastapi import FastAPI, Response, Request
from prometheus_client import Counter, Histogram, generate_latest, CONTENT_TYPE_LATEST
import time
app = FastAPI()
REQ_COUNT = Counter("http_requests_total", "Gesamtanzahl HTTP‑Anfragen", ["path","method","status"])
REQ_LATENCY = Histogram("http_request_latency_seconds", "Anfrage‑Latenz (s)", ["path","method"])
@app.middleware("http")
async def metrics_middleware(request: Request, call_next):
start = time.time()
response = await call_next(request)
latency = time.time() - start
REQ_LATENCY.labels(request.url.path, request.method).observe(latency)
REQ_COUNT.labels(request.url.path, request.method, str(response.status_code)).inc()
return response
@app.get("/metrics")
def metrics():
return Response(generate_latest(), media_type=CONTENT_TYPE_LATEST)
@app.get("/predict")
def predict():
# ... Modellaufruf ...
return {"ok": True}
Starten:
uvicorn app:app --host 0.0.0.0 --port 8000
Prüfen:
curl -s localhost:8000/metrics | head
Schritt 3 — Grafana installieren und Dashboards erstellen
Grafana visualisiert die Daten aus Prometheus. Beim Hinzufügen einer Data Source verwenden Sie die URL http://localhost:9090
.
Grafana starten:
docker run -d --name grafana -p 3000:3000 grafana/grafana-oss
Beispiel‑Panels (PromQL)
Request‑Rate:
sum(rate(http_requests_total[5m])) by (status)
Latenz P90:
histogram_quantile(0.90, sum(rate(http_request_latency_seconds_bucket[5m])) by (le))
5xx‑Fehlerrate:
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m]))
Schritt 4 — Grundlagen von Alerting und SLOs (Recording‑ & Alerting‑Regeln)
Mit Recording Rules berechnen Sie häufig verwendete Ausdrücke vorab. Alerting Rules lösen Benachrichtigungen bei hoher Fehlerrate aus.
Recording‑Rule (Beispiel):
groups:
- name: mlops-recording
rules:
- record: job:http_request_duration_seconds:p90
expr: histogram_quantile(0.90, sum(rate(http_request_latency_seconds_bucket[5m])) by (le))
Alert‑Rule (Beispiel):
groups:
- name: mlops-alerts
rules:
- alert: HighErrorRate
expr: |
(sum(rate(http_requests_total{status=~"5.."}[5m])) /
sum(rate(http_requests_total[5m]))) > 0.05
for: 5m
labels:
severity: critical
annotations:
summary: 5xx‑Fehlerrate über 5 %
description: Die 5xx/s‑Rate der letzten 5 Minuten hat den Grenzwert überschritten.
Fehlerbehebung
- Target DOWN: Netzwerk der Container und
targets
prüfen. Unter Linux ggf.localhost
statthost.docker.internal
verwenden. - Leeres
/metrics
: Sind Counter/Histogramme registriert und läuft das Middleware? - Leere Grafana‑Panels: Testen Sie denselben PromQL‑Ausdruck im Prometheus‑UI; wenn keine Serien zurückkommen, Scrape‑Einstellungen prüfen.
Fazit
Mit diesem Setup überwachen Sie Request‑Rate, Latenz und Fehlerrate Ihrer ML‑Services, erstellen Dashboards und erkennen Probleme mit einfachen Alarmregeln.
Nächste Schritte
- Qualitätsmetriken des Modells (Accuracy/Recall) per Batch‑Jobs ergänzen
- Alertmanager für Slack/Teams‑Benachrichtigungen konfigurieren
- In Kubernetes Prometheus Operator + ServiceMonitor verwenden
(Admin‑Metadaten‑Vorschlag)
- Slug:
model-monitoring-izleme-loglama
- Kategorie:
MLOps & AI Ops / Model Monitoring
- Keywords:
mlops, model monitoring, prometheus, grafana, exporter, observability, alerting
- Kurzfassung: „Metriken sammeln und Dashboards für Latenz, Request‑Rate und 5xx‑Fehlerrate mit Prometheus und Grafana für ML‑Services erstellen.“