MLOps Path

5.1.2 · блок 5

Prometheus, VictoriaMetrics и Grafana

Prometheus, VictoriaMetrics и Grafana

Зачем это нужно

Метрики USE/RED бесполезны, если их никто не собирает и не показывает. Стек курса: Prometheus (или совместимый VictoriaMetrics) для хранения time series, Grafana для dashboards и alert visualization. Этот урок — как pieces fit together в Kubernetes для ML-сервисов.

Основные идеи

Pull vs push.

Компоненты в K8s.

| Component | Role |

|-----------|------|

| **exporter / app** | Exposes `/metrics` in Prometheus text format |

| **ServiceMonitor** (Prometheus Operator) | Declares scrape config for Service |

| **Prometheus / VM** | TSDB storage, PromQL queries |

| **Grafana** | Dashboards, alerts UI |

| **Alertmanager** | Routing notifications (урок 5.3.2) |

Prometheus text format example.


# HELP http_requests_total Total HTTP requests
# TYPE http_requests_total counter
http_requests_total{method="POST",handler="/predict",code="200"} 1024

VictoriaMetrics (VM). Prometheus-compatible API и PromQL; часто дешевле по RAM/ disk at scale. Remote write из Prometheus → VM — типовой hybrid. Для курса: те же queries, другой backend.

ServiceMonitor pattern.


apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: churn-serving
spec:
  selector:
    matchLabels:
      app: churn-serving
  endpoints:
    - port: metrics
      interval: 15s

Pod Service must expose port metrics; app or sidecar implements exporter.

PromQL essentials.

Percentile и SLO — не одно и то же. p95 < 200ms означает, что 95-й перцентиль latency ниже порога; request-based SLI requests < 200ms / all requests прямо считает долю good events. Они могут быть связаны, но SLO «99.5% запросов быстрее 200ms» нельзя называть «p95 < 200ms»: для него нужен порог 99.5% и явная формула good-event ratio.

Grafana.

Istio metrics. Sidecar exposes request metrics; standard RED without app instrumentation. Labels: destination_service, response_code.

Retention and cardinality. Prometheus local storage ~15d common; long-term → VM or object storage. Drop high-cardinality labels at scrape or recording rules.

ML platform dashboards layers.

1. Cluster/node (USE).

2. Namespace workloads (pods, HPA).

3. Per-model inference (RED + version label).

4. Business KPI (often from other DB, not always Prometheus).

Как это выглядит на практике

Namespace ml-prod:

1. Inference deployment with annotations for Prometheus or dedicated prometheus-fastapi-instrumentator on port 8080 /metrics.

2. ServiceMonitor in monitoring namespace selects pods app=churn-serving.

3. Prometheus Operator configures scrape.

4. Grafana dashboard imported: «Kubernetes / Istio / Custom ML».

5. Recording rule: job:churn:request_latency_p95:5m for faster alerts.

Query for error rate (Istio):


sum(rate(istio_requests_total{destination_service="churn-serving",response_code=~"5.."}[5m]))
/
sum(rate(istio_requests_total{destination_service="churn-serving"}[5m]))

Upgrade path: Prometheus scrapes → remote_write VictoriaMetrics → Grafana queries VM for heavy dashboards.

Что сделать после занятия

Официальные материалы

Открыть интерактивную версию