Урок 7 из 8 · 20 мин · обновлено

Мониторинг и логи: Prometheus, Grafana, оповещения

Как узнать о проблеме раньше пользователей: метрики и логи, четыре золотых сигнала, связка Prometheus и Grafana, правила оповещений и почему лишние тревоги вредны.

Узнать раньше пользователей

Худший способ узнать о сбое — от покупателя, который не смог оплатить заказ. В «Чайной лавке» так и было: сайт тормозил полдня, а команда узнала об этом из отзывов.

Мониторинг — постоянное наблюдение за сервисом, чтобы проблему заметила система, а не пользователь. Он отвечает на два вопроса: «всё ли сейчас в порядке?» и «что случилось?», если не в порядке.

Метрики и логи

Метрики Логи
Что это Числа во времени Записи о событиях
Пример 120 запросов в секунду, 2% ошибок POST /checkout 500 Database timeout
Отвечают на вопрос Что происходит и насколько плохо? Почему это происходит?
Инструменты Prometheus, Grafana Системы сбора логов, например Loki или Elasticsearch

Обычно по метрикам замечают проблему, а по логам находят её причину.

Четыре золотых сигнала

Если метрик сотни, с чего начать? Инженеры, которые строили большие сервисы, советуют смотреть на четыре золотых сигнала:

  • Задержка — сколько времени занимает ответ. Страница заказа открывается за 0,3 секунды или за 5?
  • Трафик — сколько запросов приходит. Резкий рост — распродажа или атака, резкое падение — что-то сломалось.
  • Ошибки — какая доля запросов завершается неудачей.
  • Насыщенность — насколько загружены ресурсы: процессор, память, диск. Диск заполнен на 95% — скоро всё остановится.

Prometheus и Grafana

Самая распространённая связка для метрик:

  • Prometheus регулярно опрашивает приложения и серверы, собирает метрики и хранит их;
  • Grafana строит по ним графики и дашборды — экраны с главными показателями сервиса.

Prometheus понимает запросы на своём языке. Например, доля ошибок сайта за последние 5 минут:

Текст
sum(rate(http_requests_total{status=~"5.."}[5m]))
  / sum(rate(http_requests_total[5m]))

На дашборде «Чайной лавки» — четыре графика по золотым сигналам и отдельно — число оплаченных заказов в час. Последний график понятен даже владелице: если он упал до нуля в рабочее время, что-то точно не так.

Оповещения

Смотреть на графики круглосуточно никто не будет. Поэтому настраивают оповещения: при выполнении условия система присылает сообщение дежурному. Пример правила для Prometheus:

YAML
groups:
  - name: shop
    rules:
      - alert: ManyErrors
        expr: sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.05
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Больше 5% запросов к сайту завершаются ошибкой"

Тревога сработает, если доля ошибок больше 5% пять минут подряд — for: 5m отсеивает короткие случайные всплески.

Главное правило оповещений: каждое должно требовать действия. Если тревоги приходят по десять раз в день и ничего не значат, команда начнёт их игнорировать — и пропустит настоящую. Настройка мониторинга — это постоянная работа по удалению лишнего шума.

Попробуйте сами. Придумайте три оповещения для «Чайной лавки», которые действительно требуют реакции, и одно, которое лучше показывать только на дашборде.

Пример ответа

Оповещения:

  1. Сайт не отвечает на проверку дольше 2 минут.
  2. Больше 5% запросов к оформлению заказа завершаются ошибкой 5 минут подряд.
  3. Диск на сервере базы данных заполнен больше чем на 90%.

Только на дашборде: загрузка процессора 70%. Это нормальная работа под нагрузкой, а не авария. Если она начнёт мешать пользователям, это покажут задержка и ошибки.

Мини-тест · 4 вопроса

Проверьте себя

Выберите вариант, который кажется вам правильным. В конце вы увидите свой результат и объяснение к каждому вопросу.

  1. Чем метрики отличаются от логов?

  2. Что из этого — один из четырёх золотых сигналов?

  3. Для чего обычно используют Grafana?

  4. Почему вредно настроить оповещения на всё подряд?