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]

Примечания

  1. Обзор (англ.). prometheus.io. Архивировано 12 октября 2025 года.
  2. James Turnbull. Monitoring with Prometheus : [англ.]. — Turnbull Press, 2018-06-12. — ISBN 978-0-9888202-8-9.
  3. Prometheus: From metrics to insight. Power your metrics and alerting with a leading open-source monitoring solution (англ.). Дата обращения: 26 декабря 2018.
  4. Prometheus (англ.). GitHub. Дата обращения: 26 декабря 2018. Архивировано 9 октября 2025 года.
  5. Brian Brazil. Prometheus: Up & Running: Infrastructure and Application Performance Monitoring : [англ.]. — O'Reilly Media, 2018-07-09. — P. 3. — ISBN 978-1-4920-3409-4.
  6. 1 2 3 4 5 6 7 Volz, Julius; Rabenstein, Björn Prometheus: Monitoring at SoundCloud (англ.). SoundCloud (26 января 2015). Архивировано 5 мая 2025 года.
  7. 1 2 Monitor Docker Containers with Prometheus (англ.). 5π Consulting (26 января 2015). Дата обращения: 26 декабря 2018. Архивировано 3 января 2019 года.
  8. Murphy, Niall. Site Reliability Engineering: How Google Runs Production Systems : [англ.] / Niall Murphy, Betsy Beyer, Chris Jones … [et al.]. — O'Reilly Media, 2016. — «Even though Borgmon remains internal to Google, the idea of treating time-series data as a data source for generating alerts is now accessible to everyone through those open source tools like Prometheus ...». — ISBN 978-1491929124.
  9. Cloud Native Computing Foundation Accepts Prometheus as Second Hosted Project (англ.). Cloud Native Computing Foundation (9 мая 2016). Дата обращения: 26 декабря 2018. Архивировано 21 декабря 2016 года.
  10. Evans, Kristen Cloud Native Computing Foundation Announces Prometheus Graduation (англ.) (9 августа 2018). Дата обращения: 26 декабря 2018. Архивировано 9 августа 2018 года.
  11. 1 2 Prometheus 1.0 Is Here (англ.). Cloud Native Computing Foundation (18 июля 2016). Дата обращения: 26 декабря 2018. Архивировано 18 июля 2025 года.
  12. 1 2 New Features in Prometheus 2.0.0 (англ.). Robust Perception (8 ноября 2017). Дата обращения: 26 декабря 2018. Архивировано 26 февраля 2025 года.
  13. Последний релиз на Github (англ.). github.com.
  14. Alertmanager (англ.). GitHub (17 мая 2022). Архивировано 12 октября 2025 года.
  15. Data model (англ.). Prometheus. Дата обращения: 26 декабря 2018. Архивировано 5 октября 2025 года.
  16. 1 2 Integrations - Prometheus (англ.). prometheus.io. Архивировано 20 сентября 2025 года.
  17. Prometheus: Collects metrics, provides alerting and graphs web UI (англ.) (18 марта 2017). Дата обращения: 26 декабря 2018. Архивировано 26 февраля 2025 года.
  18. Querying Prometheus (англ.). Дата обращения: 4 ноября 2019. Архивировано 12 октября 2025 года.
  19. Metric types (англ.). prometheus.io. Дата обращения: 29 июня 2024. Архивировано 11 октября 2025 года.
  20. pygments/tests/examplefiles/promql/example.promql at master · pygments/pygments (англ.). GitHub.
  21. Dubey, Abhishek AlertManager Integration with Prometheus (англ.) (25 марта 2018). Дата обращения: 26 декабря 2018. Архивировано 13 ноября 2019 года.
  22. Danuka, Praneeth Alerting for Cloud-native Applications with Prometheus (англ.) (8 марта 2020). Дата обращения: 18 октября 2020.
  23. Integrations (англ.). Архивировано 20 сентября 2025 года.
  24. Prometheus alerts - Apps on Google Play (англ.).
  25. Prometheus TSDB (Part 1): The Head Block (англ.). ganeshvernekar.com (19 сентября 2020). Дата обращения: 17 января 2025. Архивировано 30 мая 2025 года.
  26. Prometheus TSDB (Part 3): Memory Mapping of Head Chunks from Disk (англ.). ganeshvernekar.com (2 октября 2020). Дата обращения: 17 января 2025. Архивировано 30 мая 2025 года.
  27. Prometheus TSDB (Part 4): Persistent Block and its Index (англ.). ganeshvernekar.com (18 октября 2020). Дата обращения: 17 января 2025. Архивировано 9 августа 2025 года.
  28. Prometheus TSDB (Part 5): Queries (англ.). ganeshvernekar.com (4 января 2021). Дата обращения: 17 января 2025. Архивировано 30 мая 2025 года.
  29. Prometheus TSDB (Part 6): Compaction and Retention (англ.). ganeshvernekar.com (27 июля 2021). Дата обращения: 17 января 2025. Архивировано 28 августа 2025 года.
  30. Prometheus TSDB (Part 2): WAL and Checkpoint (англ.). ganeshvernekar.com (26 сентября 2020). Дата обращения: 17 января 2025. Архивировано 30 мая 2025 года.
  31. Ryckbosch, Frederick Prometheus monitoring: Pros and cons (англ.) (28 июля 2017). Дата обращения: 26 декабря 2018. Архивировано 20 августа 2018 года.
  32. Prometheus Instrumentation - Prometheus (англ.). prometheus.io. Архивировано 11 октября 2025 года.
  33. Exporters (англ.). prometheus.io. Архивировано 22 сентября 2025 года.
  34. Prometheus Prometheus — Monitoring system & time series database (англ.). prometheus.io.
  35. OpenMetrics (англ.). GitHub (13 ноября 2018). Архивировано 8 декабря 2019 года.
  36. Telegraf from InfluxData (англ.). GitHub (25 декабря 2018). Архивировано 26 мая 2025 года.
  37. Announcing Stackdriver Kubernetes Monitoring (англ.). Архивировано 2 мая 2018 года.
  38. DataDogHQ (англ.). Архивировано 1 января 2018 года.
  39. Send Prometheus metric data to New Relic (англ.). docs.newrelic.com. Дата обращения: 16 апреля 2025. Архивировано 12 июля 2025 года.
  40. Configure Prometheus OpenMetrics integrations (англ.). docs.newrelic.com. Дата обращения: 16 апреля 2025. Архивировано 20 июня 2025 года.

Литература

  • 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.

Ссылки