Мониторинг
SLOzy экспортирует метрики в формате Prometheus и поддерживает интеграцию с Grafana для визуализации SLO, error budget и состояния системы.
Prometheus
Эндпоинт метрик
Метрики приложения доступны по пути /metrics (настраивается через METRICS_PATH):
METRICS_PATH=/metrics
PROMETHEUS_ENABLED=trueЭкспортируемые метрики
SLOzy экспортирует следующие метрики:
| Метрика | Тип | Метки | Описание |
|---|---|---|---|
slozy_requests_total | Counter | method, path, status | Количество HTTP-запросов |
slozy_request_duration_seconds | Histogram | method, path | Гистограмма времени ответа |
slozy_slo_value | Gauge | slo_id, slo_name | Текущее значение SLO |
slozy_error_budget_remaining | Gauge | slo_id, slo_name | Остаток error budget |
slozy_error_budget_used | Gauge | slo_id, slo_name | Использованный error budget |
slozy_active_slos_total | Gauge | — | Количество активных SLO |
slozy_slo_status | Gauge | slo_id, status | Статус SLO (1=healthy, 2=warning, 3=critical) |
slozy_db_connections_open | Gauge | — | Открытые соединения к БД |
slozy_db_connections_idle | Gauge | — | Idle-соединения к БД |
slozy_cache_hits_total | Counter | — | Количество попаданий в кэш |
slozy_cache_misses_total | Counter | — | Промахи кэша |
slozy_cache_entries_total | Gauge | — | Записей в кэше |
slozy_rate_limit_exceeded_total | Counter | ip | Превышения rate limit |
slozy_websocket_connections | Gauge | — | Активные WebSocket-соединения |
Пример конфигурации Prometheus (prometheus.yml)
yaml
scrape_configs:
- job_name: 'slozy'
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
static_configs:
- targets:
- 'slozy-web:8080'
- 'slozy-ingestor:8081'
relabel_configs:
- source_labels: [__address__]
target_label: instance
regex: '(.*):.*'
replacement: '${1}'
- job_name: 'postgres'
static_configs:
- targets:
- 'postgres-exporter:9187'
- job_name: 'redis'
static_configs:
- targets:
- 'redis-exporter:9121'Grafana
Дашборды
Поставляется набор дашбордов для Grafana:
- SLO Overview — общая панель со всеми SLO, их статусами, error budget
- SLO Detail — детальный дашборд для конкретного SLO: временной ряд значения, скорость сжигания error budget, события оповещений
- System Health — состояние инфраструктуры: БД, Redis, WebSocket-соединения, latency запросов
- Cache Performance — hit ratio, размер кэша, время ответа
Источники данных
Для каждого дашборда требуется настроить Prometheus как Data Source в Grafana:
yaml
apiVersion: 1
datasources:
- name: SLOzy
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: trueИмпорт дашбордов
Дашборды импортируются через Grafana API или UI. ID дашбордов:
| Название | ID | Версия |
|---|---|---|
| SLO Overview | slozy-overview | 1.0 |
| SLO Detail | slozy-detail | 1.0 |
| System Health | slozy-system | 1.0 |
| Cache Performance | slozy-cache | 1.0 |
Health Checks
Приложение предоставляет несколько эндпоинтов для проверки состояния:
| Путь | Описание |
|---|---|
/health | Базовая проверка приложения |
/api/v1/prometheus/health | Проверка подключения к Prometheus |
/api/v1/health/ready | Готовность к приёму трафика (проверка БД + Redis) |
Параметры health check:
HEALTH_CHECK_INTERVAL=30s
HEALTH_CHECK_TIMEOUT=10sОповещения
Конфигурация оповещений в Prometheus Alertmanager:
yaml
groups:
- name: slozy_alerts
rules:
- alert: SLOBudgetExhausted
expr: slozy_error_budget_remaining <= 0
for: 5m
labels:
severity: critical
annotations:
summary: 'Error budget исчерпан для SLO {{ $labels.slo_name }}'
- alert: SLOBurnRateTooFast
expr: slozy_error_budget_used > 0.5
for: 10m
labels:
severity: warning
annotations:
summary: 'Error budget SLO {{ $labels.slo_name }} сжигается слишком быстро'
- alert: HighRateLimitExceeded
expr: rate(slozy_rate_limit_exceeded_total[5m]) > 10
for: 5m
labels:
severity: warning
annotations:
summary: 'Более 10 превышений rate limit в минуту'
- alert: DatabaseDown
expr: slozy_db_connections_open == 0
for: 1m
labels:
severity: critical
annotations:
summary: 'База данных недоступна'