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.