Prometheus (программное обеспечение)

Prometheus — свободное программное обеспечение для мониторинга событий и оповещения[1]. Система собирает метрики в базе данных временных рядов (с поддержкой высокой размерности метаданных), построенной на модели опроса по HTTP, с возможностью выполнения сложных запросов и настройкой оповещений в реальном времени[2].[3] Проект написан на языке Go и распространяется под лицензией Apache 2.0; исходный код доступен на GitHub[4].

Общие сведения
Prometheus
Тип СУБД временных рядов
Написана на Go
Операционная система мультиплатформенное
Первый выпуск 24 ноября 2012
Аппаратные платформы x86_64, IA-32, MIPS, PowerPC и ARM
Последняя версия v3.2.1 (26 февраля 2025)
Репозиторий github.com/prometheus/pr…
Лицензия Apache License 2.0
Сайт prometheus.io

История

Разработка Prometheus началась в компании SoundCloud в 2012 году[5], когда стало ясно, что существовавшие инструменты мониторинга и метрик (StatsD, Graphite) не удовлетворяют их требованиям. В частности, отмечалась необходимость поддержки многомерной модели данных, простоты эксплуатации, масштабируемого сбора данных и мощного языка запросов — всё это в одном инструменте[6]. Проект изначально был открытым и начал использоваться, помимо SoundCloud, также компаниями Boxever и Docker, несмотря на отсутствие официального анонса[6].[7] На Prometheus повлиял внутренний инструмент мониторинга Borgmon, используемый в Google[8].

В 2013 году Prometheus стал использоваться в продакшене в SoundCloud[6]. Официальный публичный анонс состоялся в январе 2015 года[6]

В мае 2016 года Cloud Native Computing Foundation (CNCF) приняла Prometheus в качестве своего второго инкубируемого проекта после Kubernetes.[9]. В августе 2018 года CNCF объявила о завершении процесса «выпуска» проекта всё в том же фонде[10].

Выпуски

Prometheus 1.0 был выпущен в июле 2016 года[11]. Последующие версии выходили в ходе 2016 и 2017 годов; в ноябре 2017 года появилась версия 2.0[12].

История версий
Версия Дата Ветка/статус Источник
1.0 июль 2016 стабильная [11]
2.0 ноябрь 2017 стабильная [12]
v3.2.1 26 февраля 2025 стабильная [13]

Архитектура

Типичная система мониторинга на базе Prometheus состоит из нескольких компонентов:

  • Несколько экспортёров метрик, запускаемых на целевых хостах.
  • Сервер Prometheus для централизованного сбора и хранения метрик.
  • Служба Alertmanager[14] для управления оповещениями.
  • Grafana для построения дашбордов.
  • Язык запросов PromQL для построения графиков и настройки оповещений.

Формат хранения данных

Данные Prometheus хранятся в виде метрик, каждая из которых имеет имя (для обращения и запросов). Произвольное количество пар ключ=значение («лейблы») позволяют уточнять источник и детали метрики (например, какой сервер, HTTP-код ответа, способ запроса — GET/POST, endpoint и т. д.). Такая система организации и оперативных запросов объясняет, почему модель данных Prometheus называют многомерной[15].[6][7]

Данные сохраняются локально на диске для быстрой записи и запросов[6] Также поддерживается выгрузка метрик во внешние хранилища.[16].

Сбор данных

Prometheus собирает данные в виде временных рядов, строя их по pull-модели — сервер опрашивает заданный список источников (экспортёров) с заданной частотой. Каждый источник отдаёт актуальные значения метрик на свой endpoint, Prometheus агрегирует их[6] Имеются механизмы автоматического обнаружения ресурсов для сбора метрик.[17].

PromQL

Prometheus предоставляет собственный язык запросов PromQL (Prometheus Query Language), позволяющий гибко выбирать и агрегировать данные. PromQL оптимизирован для работы с базами временных рядов и реализует расширенные функции по работе со временем. Примеры: функция, вектора-срезы по времени, обработка скользящих (range vector) и мгновенных (instant vector) выборок[18]. Структура системы строится вокруг четырёх типов метрик:[19]

  • Gauge (измеряемое значение)
  • Counter (счётчик)
  • Histogram (гистограмма)
  • Summary (суммарная статистика)

Пример кода

# Метрика с фильтрацией по лейблам
go_gc_duration_seconds{instance="localhost:9090", job="alertmanager"}

# Операторы агрегации
sum by (app, proc) (
  instance_memory_limit_bytes - instance_memory_usage_bytes
) / 1024 / 1024

[20]

Оповещения и мониторинг

В конфигурации Prometheus можно задавать условия и длительность, при которых срабатывает оповещение. По наступлении условия алерт пересылается в сервис Alertmanager. Alertmanager поддерживает подавление оповещений и их релей на email, Slack и системы уведомлений вроде PagerDuty[21]. Дополнительно интеграция возможна с мессенджерами вроде Microsoft Teams[22] через Webhook Receiver[23], а также возможна отправка алертов напрямую на Android-устройства даже без настройки целей в Alertmanager[24].

СУБД временных рядов

В Prometheus реализована собственная система хранения временных рядов: свежие данные (по умолчанию 1-3 часа) размещаются одновременно в памяти[25] и в файлах на диске с использованием mmap[26], а для долговременного хранения метрик используется блочный формат[27] с обратным индексом. Такая организация удобна для паттернов запросов Prometheus[28]. В ходе фонового обслуживания мелкие блоки консолидируются в крупные (compaction)[29] для ускорения обработки запросов. Используется также журнал предзаписи (WAL) для устойчивости к сбоям[30].

Дашборды

Prometheus не предназначен для полноценных дашбордов — он может строить отдельные простые графики по запросу, но для построения комплексных дашбордов используется Grafana (что иногда критикуется из-за необходимости дополнительной настройки)[31].

Интероперабельность

Prometheus ориентирован на white-box-мониторинг — приложения интегрируют экспортёр метрик, который собирает данные и отдаёт их Prometheus[32]. Для популярных приложений существуют готовые экспортёры и агенты[33]. Кроме того, Prometheus поддерживает мониторинговые и административные протоколы для интеграции и миграции: Graphite, StatsD, SNMP, JMX, CollectD.

Основной акцент сделан на доступности платформы и базовых операциях[34]. Метрики обычно хранятся несколько недель; для долговременного хранения их можно выгружать во внешние хранилища[16]

Стандартизация формата OpenMetrics

Существуют инициативы по стандартизации формата экспорта Prometheus под названием OpenMetrics.[35]. Формат внедрён в ряде продуктов: в Telegraf от InfluxData[36], InfluxDB, Google Cloud Platform[37], DataDog[38] и New Relic[39].[40]

Примечания

Литература

  • Russ, McKendrick. Monitoring Docker: мониторинг контейнеров Docker и их приложений с помощью нативных и сторонних инструментов : [англ.]. — Birmingham, UK, 15 декабря 2015. — ISBN 9781785885501.
  • JOSEPH., HECK. KUBERNETES FOR DEVELOPERS: использование Kubernetes для разработки, тестирования и развертывания приложений в контейнерах : [англ.]. — [S.l.] : PACKT PUBLISHING, 2018. — ISBN 978-1788830607.
  • Burns, Brendan. Designing distributed systems: паттерны и парадигмы для масштабируемых, надёжных сервисов : [англ.]. — Первое. — Sebastopol, CA, 20 февраля 2018. — ISBN 9781491983614.
  • Martin., Helmich. Cloud Native programming with Golang. Разработка веб-приложений и микросервисов для облака на Go : [англ.]. — Birmingham : Packt Publishing, 2017. — ISBN 9781787127968.
  • Alok, Shrivastwa. Hybrid cloud for architects: создание надёжных гибридных облачных решений на базе AWS и OpenStack : [англ.]. — Birmingham, UK, 23 февраля 2018. — ISBN 9781788627986.
  • Kaewkasi, Chanwit. Native Docker Clustering with Swarm : [англ.]. — Packt Publishing, Limited, 2016. — ISBN 978-1786469755.

Ссылки