Skip to content
PrincessSatsPublic

About

HWs for mlops

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

Repository files navigation

MLOps HW: Monitoring + SLO + Alerting (Prometheus + Grafana)

Репозиторий: mlopshw (https://github.com/PrincessSats/mlopshw.git) Цель: развернуть наблюдаемость для ML-сервиса, определить SLO и настроить алерт при его нарушении.

Что внутри

  • ML-сервис на FastAPI с /predict, /metrics, /health и метриками Prometheus (histogram + counters) для SLO.
  • Prometheus собирает метрики сервиса, Grafana подключена к Prometheus и содержит дашборд по p95 latency.
  • Alert Rule в Grafana срабатывает (Firing) при нарушении SLO.
  • Скриншоты панели и алерта: screenshots/*.png.

Стек и порты

Запуск

  1. Установите Docker и Docker Compose.
  2. Поднимите стек:
docker-compose up --build
  1. Проверьте доступность:

Выбранный SLO

p95 latency для /predict < 1.0 секунды (окно 5 минут).

Почему так:

  • p95 отражает хвост задержек и влияет на UX.
  • Histogram в Prometheus позволяет корректно считать квантили через histogram_quantile().

PromQL для панели/алерта:

histogram_quantile(0.95, sum(rate(request_latency_seconds_bucket{endpoint="/predict"}[5m])) by (le))

Метрики сервиса (ml_service/main.py)

  • Latency Histogram: request_latency_seconds_bucket/count/sum{endpoint="..."}
  • Requests Counter: requests_total{endpoint="...", status="..."}
  • Errors Counter: errors_total{endpoint="..."}

Prometheus

Файл: prometheus.yml

global:
  scrape_interval: 5s

scrape_configs:
  - job_name: "ml_service"
    static_configs:
      - targets: ["ml_service:8000"]

Grafana

  • Datasource provisioning: grafana/provisioning/datasources/datasource.yml (Prometheus http://prometheus:9090).
  • Дашборд: grafana/dashboards/ml_service_dashboard.json (панель p95 latency, обновление 5s).
  • Дашборд подхватывается через grafana/provisioning/dashboards/dashboard.yml.

Alert Rule (Grafana)

  • Условие: p95 latency > 1s.
  • Expr: histogram_quantile(0.95, sum(rate(request_latency_seconds_bucket{endpoint="/predict"}[5m])) by (le)) > 1
  • For: 2m, evaluate every 1m. При превышении правило переходит в состояние Firing (см. скриншоты).

Проверка срабатывания алерта

  1. Запустите сервисы (docker-compose up).
  2. Искусственно увеличьте задержку, чтобы выбить SLO:
for i in {1..50}; do curl -s "http://localhost:8000/predict?sleep=2" > /dev/null; done
  1. На дашборде p95 уйдет выше 1s; через ~2 минуты правило станет Firing. Скриншоты лежат в screenshots/.

Полезные файлы

  • docker-compose.yml — поднимает ml_service + Prometheus + Grafana.
  • prometheus.yml — конфигурация сбора метрик.
  • grafana/provisioning/datasources/datasource.yml — datasource Prometheus.
  • grafana/provisioning/dashboards/dashboard.yml — авто-подхват дашбордов.
  • grafana/dashboards/ml_service_dashboard.json — экспорт дашборда SLO.
  • ml_service/main.py — FastAPI сервис с метриками и эндпоинтами.
  • screenshots/*.png — график и алерт в состоянии Firing.

Кратко о целях задания

  • Собрать и визуализировать метрики из Python-сервиса.
  • Определить SLO (latency p95 < 1 c) и реализовать метрику Histogram для его расчета.
  • Создать панель в Grafana с правильным PromQL-запросом.
  • Настроить алерт, который срабатывает при нарушении SLO, и проверить его вручную.

About

HWs for mlops

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages