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
Оповещения и мониторинг
В конфигурации 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]
Примечания
- ↑ Обзор (англ.). prometheus.io. Архивировано 12 октября 2025 года.
- ↑ James Turnbull. Monitoring with Prometheus : [англ.]. — Turnbull Press, 2018-06-12. — ISBN 978-0-9888202-8-9.
- ↑ Prometheus: From metrics to insight. Power your metrics and alerting with a leading open-source monitoring solution (англ.). Дата обращения: 26 декабря 2018.
- ↑ Prometheus (англ.). GitHub. Дата обращения: 26 декабря 2018. Архивировано 9 октября 2025 года.
- ↑ Brian Brazil. Prometheus: Up & Running: Infrastructure and Application Performance Monitoring : [англ.]. — O'Reilly Media, 2018-07-09. — P. 3. — ISBN 978-1-4920-3409-4.
- ↑ 1 2 3 4 5 6 7 Volz, Julius; Rabenstein, Björn Prometheus: Monitoring at SoundCloud (англ.). SoundCloud (26 января 2015). Архивировано 5 мая 2025 года.
- ↑ 1 2 Monitor Docker Containers with Prometheus (англ.). 5π Consulting (26 января 2015). Дата обращения: 26 декабря 2018. Архивировано 3 января 2019 года.
- ↑ 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.
- ↑ Cloud Native Computing Foundation Accepts Prometheus as Second Hosted Project (англ.). Cloud Native Computing Foundation (9 мая 2016). Дата обращения: 26 декабря 2018. Архивировано 21 декабря 2016 года.
- ↑ Evans, Kristen Cloud Native Computing Foundation Announces Prometheus Graduation (англ.) (9 августа 2018). Дата обращения: 26 декабря 2018. Архивировано 9 августа 2018 года.
- ↑ 1 2 Prometheus 1.0 Is Here (англ.). Cloud Native Computing Foundation (18 июля 2016). Дата обращения: 26 декабря 2018. Архивировано 18 июля 2025 года.
- ↑ 1 2 New Features in Prometheus 2.0.0 (англ.). Robust Perception (8 ноября 2017). Дата обращения: 26 декабря 2018. Архивировано 26 февраля 2025 года.
- ↑ Последний релиз на Github (англ.). github.com.
- ↑ Alertmanager (англ.). GitHub (17 мая 2022). Архивировано 12 октября 2025 года.
- ↑ Data model (англ.). Prometheus. Дата обращения: 26 декабря 2018. Архивировано 5 октября 2025 года.
- ↑ 1 2 Integrations - Prometheus (англ.). prometheus.io. Архивировано 20 сентября 2025 года.
- ↑ Prometheus: Collects metrics, provides alerting and graphs web UI (англ.) (18 марта 2017). Дата обращения: 26 декабря 2018. Архивировано 26 февраля 2025 года.
- ↑ Querying Prometheus (англ.). Дата обращения: 4 ноября 2019. Архивировано 12 октября 2025 года.
- ↑ Metric types (англ.). prometheus.io. Дата обращения: 29 июня 2024. Архивировано 11 октября 2025 года.
- ↑ pygments/tests/examplefiles/promql/example.promql at master · pygments/pygments (англ.). GitHub.
- ↑ Dubey, Abhishek AlertManager Integration with Prometheus (англ.) (25 марта 2018). Дата обращения: 26 декабря 2018. Архивировано 13 ноября 2019 года.
- ↑ Danuka, Praneeth Alerting for Cloud-native Applications with Prometheus (англ.) (8 марта 2020). Дата обращения: 18 октября 2020.
- ↑ Integrations (англ.). Архивировано 20 сентября 2025 года.
- ↑ Prometheus alerts - Apps on Google Play (англ.).
- ↑ Prometheus TSDB (Part 1): The Head Block (англ.). ganeshvernekar.com (19 сентября 2020). Дата обращения: 17 января 2025. Архивировано 30 мая 2025 года.
- ↑ Prometheus TSDB (Part 3): Memory Mapping of Head Chunks from Disk (англ.). ganeshvernekar.com (2 октября 2020). Дата обращения: 17 января 2025. Архивировано 30 мая 2025 года.
- ↑ Prometheus TSDB (Part 4): Persistent Block and its Index (англ.). ganeshvernekar.com (18 октября 2020). Дата обращения: 17 января 2025. Архивировано 9 августа 2025 года.
- ↑ Prometheus TSDB (Part 5): Queries (англ.). ganeshvernekar.com (4 января 2021). Дата обращения: 17 января 2025. Архивировано 30 мая 2025 года.
- ↑ Prometheus TSDB (Part 6): Compaction and Retention (англ.). ganeshvernekar.com (27 июля 2021). Дата обращения: 17 января 2025. Архивировано 28 августа 2025 года.
- ↑ Prometheus TSDB (Part 2): WAL and Checkpoint (англ.). ganeshvernekar.com (26 сентября 2020). Дата обращения: 17 января 2025. Архивировано 30 мая 2025 года.
- ↑ Ryckbosch, Frederick Prometheus monitoring: Pros and cons (англ.) (28 июля 2017). Дата обращения: 26 декабря 2018. Архивировано 20 августа 2018 года.
- ↑ Prometheus Instrumentation - Prometheus (англ.). prometheus.io. Архивировано 11 октября 2025 года.
- ↑ Exporters (англ.). prometheus.io. Архивировано 22 сентября 2025 года.
- ↑ Prometheus Prometheus — Monitoring system & time series database (англ.). prometheus.io.
- ↑ OpenMetrics (англ.). GitHub (13 ноября 2018). Архивировано 8 декабря 2019 года.
- ↑ Telegraf from InfluxData (англ.). GitHub (25 декабря 2018). Архивировано 26 мая 2025 года.
- ↑ Announcing Stackdriver Kubernetes Monitoring (англ.). Архивировано 2 мая 2018 года.
- ↑ DataDogHQ (англ.). Архивировано 1 января 2018 года.
- ↑ Send Prometheus metric data to New Relic (англ.). docs.newrelic.com. Дата обращения: 16 апреля 2025. Архивировано 12 июля 2025 года.
- ↑ 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.