Prometheus ve Grafana ile ML Servislerini İzleme

03 September 2025
Özet: Bu rehberde, üretimde çalışan ML servisleri için **Prometheus** ile metrik toplama ve **Grafana** ile görselleştirme kurulumunu yapacak; **istek hızı**, **gecikme (latency)** ve **5xx hata oranı** panellerini oluşturacak ve temel **alarm** kurallarını tanımlayacaksınız.

Prometheus ve Grafana ile ML Servislerini İzleme

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’ta host.docker.internal yerine localhost 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.”
Makale Sayfasına Dön