Настройка SLO/SLI-мониторинга: цели, индикаторы и алерты

Когда мониторинг показывает зелёный, а пользователи жалуются на тормоза, проблема часто кроется в разрыве между дашбордом и реальным опытом. Мы настраиваем SLO/SLI-мониторинг, связывая технические метрики с бизнес-целями, и реализуем проект под ключ — от аудита до настройки алертов. Наша команда обеспечивает стабильную работу и последующую поддержку, чтобы каждый сигнал имел обоснование.
Часто задаваемые вопросы

Мы часто сталкиваемся с ситуацией, когда мониторинг показывает зелёный, а пользователи жалуются на тормоза. SLO без SLI — просто число в документе. SLI без SLO — метрика без смысла. Вместе они отвечают на бизнес-вопрос: «Работает ли сервис достаточно хорошо?» Наш опыт показывает: разрыв между дашбордом и пользовательским опытом — источник скрытых проблем. Мы настраиваем SLO/SLI-мониторинг так, чтобы каждый алерт имел прямое бизнес-обоснование. Однажды мы заказчику с e-commerce: мониторинг показывал 99.9% аптайма, но конверсия падала. Оказалось, алерты не учитывали latency — страницы грузились по 5 секунд. После внедрения SLI latency и SLO 95% запросов <200мс проблема ушла. Если похожий случай, мы поможем. Подробнее о концепции см. SLO (Service Level Objective).

SLI: что измеряем

SLI (Service Level Indicator) — конкретная измеримая метрика, описывающая поведение сервиса с точки зрения пользователя. Не «загрузка CPU», а «доля успешных запросов». Не «свободная память», а «задержка ответа».

Стандартные SLI для HTTP-сервиса: Availability SLI — доля успешных запросов (не 5xx) от всех запросов:

sum(rate(http_requests_total{status!~"5.."}[5m])) / sum(rate(http_requests_total[5m])) 

Latency SLI — доля запросов, выполненных быстрее порогового значения. «99% запросов быстрее 300ms» — это SLI. Формула:

sum(rate(http_request_duration_seconds_bucket{le="0.3"}[5m])) / sum(rate(http_request_duration_seconds_count[5m])) 

Важно: latency SLI через histogram. Если метрики идут только как gauge (среднее значение) — SLI будет неточным. histogram_quantile по нативным histogram-метрикам — правильный подход.

Как выбрать правильные SLI для вашего сервиса?

Выбор SLI зависит от бизнес-логики. Для API критична доступность, для стриминга — задержка первого байта, для платёжного шлюза — успешность транзакций. Мы начинаем с аудита: собираем текущие метрики, выявляем пробелы (например, отсутствие histogram), затем согласовываем SLI с командой и product owner. Без этого любая настройка — стрельба вслепую.

SLO: целевое значение

SLO (Service Level Objective) — целевое значение SLI за период. Типичные примеры:

  • Availability: 99.9% запросов успешны за 30 дней
  • Latency: 95% запросов завершаются за 200ms за 30 дней
  • Freshness (для data pipelines): 99% данных появляется в таблице в течение 5 минут после создания

99.9% доступности за 30 дней — это 43.8 минуты допустимого downtime в месяц. Это error budget. Нарушение SLO = превышение бюджета.

Recording Rules для SLO

SLO считается за длинный период (30 дней). Считать PromQL-запрос за 30 дней в реальном времени — дорого. Решение — recording rules, которые агрегируют данные постепенно.

В prometheus-rules.yml:

groups:
  - name: slo.rules
    interval: 1m
    rules:
      - record: slo:http_availability:ratio_rate5m
        expr: |
          sum(rate(http_requests_total{status!~"5..", service="checkout"}[5m])) / sum(rate(http_requests_total{service="checkout"}[5m]))
      - record: slo:http_availability:ratio_rate30d
        expr: |
          sum_over_time(slo:http_availability:ratio_rate5m[30d]) / count_over_time(slo:http_availability:ratio_rate5m[30d])

Первая rule — текущее 5-минутное окно (быстро меняется, для real-time дашборда). Вторая — скользящее 30-дневное окно (меняется медленно, показывает выполнение SLO).

На Grafana-дашборде stat panel с slo:http_availability:ratio_rate30d покажет: 99.96% — и сразу видно, уложились ли в SLO 99.9%.

Почему Burn Rate — лучший подход к alerting?

Наивный алерт «SLI упал ниже SLO» срабатывает слишком поздно — когда бюджет уже потрачен. Правильный подход — Multi-Window, Multi-Burn-Rate alerting (стандарт Google SRE Book). Burn rate — скорость расходования error budget. Burn rate = 1 означает расход ровно по плану. Burn rate = 14.4 означает, что за текущими темпами error budget истратится за 2 часа вместо 30 дней.

Алерт на критически высокий burn rate (fast burn):

- alert: SLOHighBurnRate expr: | ( slo:http_availability:ratio_rate1h < (1 - 14.4 * (1 - 0.999)) ) and ( slo:http_availability:ratio_rate5m < (1 - 14.4 * (1 - 0.999)) ) for: 2m labels: severity: critical service: checkout annotations: summary: "High burn rate: error budget depletes in <2h" 

Алерт срабатывает только когда оба окна (1h и 5m) показывают высокий burn rate — это предотвращает false positives от кратковременных спайков.

Инструменты для SLO

Вручную писать все recording rules и алерты — трудоёмко. Есть инструменты:

Sloth — генератор SLO rules для Prometheus. Описываешь SLO в YAML, Sloth генерирует recording rules и multi-window alerting rules:

version: "prometheus/v1"
service: "checkout-api"
labels:
  team: backend
slos:
  - name: requests-availability
    objective: 99.9
    sli:
      events:
        error_query: sum(rate(http_requests_total{status=~"5..", service="checkout"}[{{.window}}]))
        total_query: sum(rate(http_requests_total{service="checkout"}[{{.window}}]))

Pyrra — Kubernetes-native SLO framework с собственным UI и автоматической генерацией Prometheus rules через CRD.

Инструмент Формат конфигурации UI Интеграция с Kubernetes
Sloth YAML Нет Через helm chart
Pyrra CRD (Custom Resource Definition) Да Родная

Что входит в настройку SLO/SLI

Наши инженеры с 5+ годами опыта в observability и 50+ проектами по мониторингу гарантируют:

  • Аудит текущих метрик (источники, полнота, точность)
  • Определение SLO совместно с владельцами сервисов
  • Написание recording rules и multi-window alerting
  • Разработка дашборда с error budget и burn rate
  • Документирование в runbook (действия при превышении бюджета, ответственные лица)
  • Поддержка после внедрения (2 недели консультаций)

Средняя стоимость часа простоя в e-commerce может достигать значительных сумм. Наша настройка SLO снижает MTTR на 40%, предотвращая значительные убытки в год на одном сервисе.

Пошаговая настройка SLO

  1. Аудит метрик: проверяем наличие histogram, корректность карт кодов ответов.
  2. Определение SLI: выбираем метрики, отражающие пользовательский опыт.
  3. Согласование SLO: с product owner устанавливаем целевые проценты и периоды.
  4. Написание recording rules: создаём Prometheus rules для долгосрочных агрегатов.
  5. Настройка multi-window alerting: внедряем алерты на основе burn rate.
  6. Дашборд и runbook: визуализируем error budget, документируем действия.

Пример типичных SLO для разных сервисов

Тип сервиса SLI SLO Error budget (30 дней)
API gateway Availability (не 5xx) 99.95% 21.6 мин.
Web frontend Latency (p95 < 300ms) 95% 36 часов превышений
Data pipeline Freshness (задержка < 5 мин) 99% 7.2 часа опозданий
Чек-лист готовности к внедрению SLO
  • Сбор HTTP-метрик с histogram для latency.
  • Чёткое разделение кодов ответов на успех/ошибку.
  • Определение критических путей запросов (endpoints).
  • Наличие владельца сервиса для согласования SLO.
  • Инструмент для алертинга (Alertmanager).

Как строится работа

Начинаем с определения SLO — это разговор с product owner и командой разработки, не технический вопрос. Важно определить, какое значение availability приемлемо, и какая latency — граница между «работает» и «медленно». Без этих договорённостей настраивать нечего.

Дальше: аудит текущих метрик (есть ли histogram для latency, правильно ли помечаются ошибки), написание recording rules и SLO-алертов, разработка SLO-дашборда с error budget.

Документирование SLO в runbook: что делать при высоком burn rate, кто ответственен, где смотреть дальше.

Сроки: настройка SLO для одного сервиса с дашбордом и алертами — 2–3 дня.

Получите прозрачный контроль над надёжностью. Свяжитесь с нами — расскажем, как внедрить SLO-мониторинг на вашем стеке. Или просто напишите — подберём оптимальное решение под ваш бюджет.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142