Giriş
Üretimde çalışan ML servislerinin sağlığını takip etmek için gözlemlenebilirlik (observability) şarttır. Aşağıdaki adımlarda Prometheus ile metrik toplamayı, Grafana ile görselleştirmeyi ve basit alarm kurallarını kuracaksınız.
Önkoşullar
- Linux tabanlı sunucu veya Docker ortamı
- 9090 (Prometheus) ve 3000 (Grafana) portlarına erişim
- Çalışan bir HTTP API (ör. FastAPI) — örneklerde
:8000
Not: Komutlar
bash
bloklarında verilmiştir;sudo
yetkili, root olmayan bir kullanıcı varsayılmıştır.
Adım 1 — Prometheus’u başlatın ve hedef tanımlayın
Prometheus, zaman serisi metrikleri belirli aralıklarla (scrape) toplayan bir sunucudur. İlk olarak hedef servisinizi ekleyen bir konfigürasyon yazın.
Konfigürasyon (prometheus.yml):
global:
scrape_interval: 15s
scrape_configs:
- job_name: "ml-service"
metrics_path: /metrics
static_configs:
- targets: ["host.docker.internal:8000"] # Linux'ta localhost:8000 kullanabilirsiniz
Prometheus’u başlatın:
docker run -d --name prom -p 9090:9090 -v "$PWD/prometheus.yml:/etc/prometheus/prometheus.yml" prom/prometheus
Doğrulama:
curl -s localhost:9090/-/ready # 200 OK beklenir
Adım 2 — Uygulamanıza Prometheus exporter ekleyin (FastAPI örneği)
Servisinizin /metrics
altında Prometheus formatında metrik üretmesi gerekir. Aşağıdaki örnek, istek sayısı ve gecikme metriklerini toplar.
Kurulum:
python -m venv .venv && source .venv/bin/activate
pip install fastapi uvicorn prometheus-client
Uygulama (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", "Toplam HTTP istek sayısı", ["path","method","status"])
REQ_LATENCY = Histogram("http_request_latency_seconds", "İstek gecikmesi (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():
# ... model çağrısı ...
return {"ok": True}
Çalıştırma:
uvicorn app:app --host 0.0.0.0 --port 8000
Doğrulama:
curl -s localhost:8000/metrics | head
Adım 3 — Grafana’yı kurun ve paneller oluşturun
Grafana, Prometheus’tan gelen verileri panolarda görselleştirir. Data source eklerken URL olarak http://localhost:9090
kullanın.
Grafana’yı başlatın:
docker run -d --name grafana -p 3000:3000 grafana/grafana-oss
Örnek paneller (PromQL)
İstek hızı:
sum(rate(http_requests_total[5m])) by (status)
Gecikme P90:
histogram_quantile(0.90, sum(rate(http_request_latency_seconds_bucket[5m])) by (le))
5xx hata oranı:
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m]))
Adım 4 — Alarm ve SLO temelleri (recording & alerting rules)
Sık kullanılan hesaplamaları recording rule ile önceden hesaplayabilir, alerting rule ile yüksek hata oranlarında uyarı üretebilirsiniz.
Recording rule (örnek):
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 (örnek):
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 hata oranı %5'i aştı
description: Son 5 dakikadaki 5xx/s oranı eşik değerini aştı.
Sorun Giderme
- Hedef DOWN: Container ağı veya
targets
adresleri doğru mu? Linux’tahost.docker.internal
yerinelocalhost
kullanmanız gerekebilir. /metrics
boş: Exporter kayıtları (Counter/Histogram) eklendi mi, middleware çalışıyor mu?- Grafana paneli boş: Aynı PromQL ifadesini Prometheus UI’da deneyin; seri dönmüyorsa scrape ayarını kontrol edin.
Sonuç
Bu kurulumla ML servisiniz için istek hızı, gecikme ve hata oranı metriklerini izleyebilir, panolarınızı oluşturabilir ve temel alarm kurallarıyla olayları yakalayabilirsiniz.
Sonraki Adımlar
- Model kalitesi metriklerini (accuracy/recall) batch işler ile eklemek
- Alertmanager ile Slack/Teams bildirimlerini yapılandırmak
- Kubernetes’te Prometheus Operator + ServiceMonitor kullanmak
(Admin için önerilen meta)
- Slug:
model-monitoring-izleme-loglama
- Kategori:
MLOps & AI Ops / Model Monitoring
- Anahtar kelimeler:
mlops, model monitoring, prometheus, grafana, exporter, observability, alerting
- Özet (kısa): “Prometheus ve Grafana ile ML servislerinde gecikme, istek hızı ve 5xx hata oranını izlemek için metrik toplama, panolar ve temel alarmlar.”