Prometheus

Система мониторинга с открытым кодом: собирает числовые метрики серверов и приложений, хранит их как временные ряды и рассылает оповещения.

Prometheus — система мониторинга и оповещения с открытым исходным кодом. Она регулярно собирает числовые показатели — метрики — с серверов, баз данных и приложений: сколько запросов в секунду, сколько ошибок, сколько памяти занято, насколько заполнен диск. Метрики хранятся как временные ряды, по ним строятся графики и срабатывают оповещения. Проект начался в 2012 году в компании SoundCloud, а в 2016-м стал вторым после Kubernetes проектом фонда CNCF.

Как работает

  • Сбор по запросу (pull). Приложение отдает текущие значения метрик по адресу вроде /metrics, а Prometheus сам опрашивает его раз в 15–30 секунд.
  • Экспортеры — готовые агенты, которые отдают метрики систем, не умеющих делать это сами: node_exporter для серверов Linux, экспортеры для PostgreSQL, Redis, Nginx и сотен других.
  • Метки. Каждая метрика уточняется метками: http_requests_total{service="billing", status="500"}. Это позволяет смотреть данные в любом разрезе.
  • Alertmanager — отдельный компонент, который группирует оповещения и отправляет их в почту, мессенджеры и системы дежурств.

Язык запросов PromQL

sum(rate(http_requests_total{service="billing", status=~"5.."}[5m]))
  /
sum(rate(http_requests_total{service="billing"}[5m]))

Запрос считает долю ответов с ошибкой сервера за последние пять минут. Если она превышает, например, 1%, срабатывает оповещение. На таких запросах строят показатели, которыми измеряется SLA.

Что мониторить

  • Для сервисов — запросы, ошибки и длительность (метод RED: rate, errors, duration).
  • Для ресурсов — загрузку, насыщение и ошибки процессора, памяти, дисков, сети (метод USE).
  • Бизнес-показатели — число оплат, заявок, отправленных уведомлений: падение до нуля часто первым сигнализирует о проблеме, которую технические метрики не видят.

Например, постоянно растущее потребление памяти процессом — признак утечки памяти.

Ограничения

  • Prometheus хранит числа, а не журналы событий и не трассировки запросов — для них нужны отдельные системы.
  • Метки с огромным числом значений — номер пользователя, идентификатор запроса — раздувают базу и замедляют ее; такие данные в метки не кладут.
  • Для долгого хранения и больших объемов используют совместимые с Prometheus хранилища.

Prometheus и Grafana

У Prometheus есть простой встроенный интерфейс, но панели мониторинга обычно строят в Grafana. Вместе они — стандартная связка мониторинга в современной инфраструктуре и одна из основ практики DevOps.