🗽 Что такое Prometheus и почему он так популярен?

Статьи

Prometheus – это решение для мониторинга с открытым исходным кодом для сбора и агрегирования метрик в виде временных рядов данных.

Проще говоря, каждый элемент в хранилище Prometheus – это метрическое событие, сопровождаемое временной меткой его возникновения.

Prometheus был первоначально разработан в компании Soundcloud, но сейчас это проект сообщества, поддерживаемый Cloud Native Computing Foundation (CNCF).

За последнее десятилетие он быстро приобрел известность, поскольку сочетание функций запросов и “облачной” архитектуры сделало его идеальным стеком мониторинга для современных приложений.

В этой статье мы объясним роль Prometheus, расскажем, как он хранит и предоставляет данные, и выделим, где заканчивается ответственность Prometheus.

Отчасти его популярность объясняется совместимостью с другими платформами, которые могут предоставлять данные в более удобных форматах.

Что делает Prometheus?

Prometheus хранит события в режиме реального времени. Эти события могут быть любыми, имеющими отношение к вашему приложению, например, потребление памяти, использование сети или отдельные входящие запросы.

Основной единицей данных является “метрика”. Каждой метрике присваивается имя, на которое можно ссылаться, а также набор меток. Метки – это произвольные пары данных “ключ-значение”, которые можно использовать для фильтрации метрик в вашей базе данных.

Метрики всегда основаны на одном из четырех основных типов инструментов:

  • Counter– значение, которое постоянно увеличивается, никогда не уменьшается и не сбрасывается.
  • Gauge  – значение, которое может изменяться в любом направлении в любое время.
  • Histogram – выборка из нескольких значений, которая обеспечивает сумму всех сохраненных значений, а также подсчет зарегистрированных событий.
  • Summary  – Сводка функционирует аналогично гистограмме, но поддерживает настраиваемые квантили для совокупного мониторинга за скользящие периоды времени.

Prometheus определяет текущее значение ваших метрик с помощью механизма получения данных на основе извлечения.

Он периодически опрашивает источник данных, который поддерживает каждую метрику, а затем сохраняет результат как новое событие в базе данных временных рядов.

Мониторируемое приложение отвечает за реализацию конечной точки, используемой в качестве источника данных; такие поставщики данных обычно называются экспортерами.

☸️ Как установить Prometheus и Grafana на Kubernetes с помощью Helm 3

Модель на основе извлечения упрощает интеграцию Prometheus в ваши приложения.

Все, что вам нужно сделать, это предоставить совместимую конечную точку, которая отображает текущее значение метрики для сбора.

Все остальное Prometheus берет на себя.

Хотя это может привести к неэффективности – например, если Prometheus снова опросит конечную точку до того, как данные изменятся, – это означает, что вашему коду не нужно обрабатывать транспортировку метрик.

Подробнее об экспортерах

Экспортеры отвечают за отображение метрик вашего приложения, готовых для сбора Prometheus.

Многие пользователи начинают с простого развертывания Node Exporter, который собирает основные системные метрики с Linux-хоста, на котором он установлен.

Доступен широкий спектр экспортеров, многие из которых предоставляются самим Prometheus или официальными поставщиками сообщества.

Если вы отслеживаете популярный механизм баз данных, такой как MySQL, PostgreSQL и MongoDB, или отслеживаете HTTP-сервер, механизм регистрации или шину обмена сообщениями, велика вероятность того, что экспортер уже существует.

Как контролировать веб-сервер Apache с помощью Prometheus и Grafana за 5 минут

Вы можете отслеживать собственные метрики вашего приложения, написав свой собственный экспортер.

При таком подходе нет никаких ограничений – вы можете отслеживать время, проведенное на целевой странице, объем продаж, регистрацию пользователей или все остальное, что важно для вашей системы.

Экспортеры – это простые конечные точки HTTP API, поэтому они могут быть созданы на любом языке программирования.

Prometheus предоставляет официальные клиентские библиотеки для Go, Java/Scala, Python и Ruby, которые облегчают инструментарий вашего кода.

Инициативы сообщества предоставили неофициальные библиотеки для большинства других популярных языков.

Запрос данных Prometheus

Данные в Prometheus запрашиваются с помощью PromQL, встроенного языка запросов, который позволяет выбирать, анализировать и форматировать метрики с помощью различных операторов и функций.

Поскольку Prometheus использует хранение временных рядов, поддерживается выбор диапазона времени и продолжительности, что позволяет легко находить данные, добавленные за определенный период времени.

Вот пример, который отображает все события memory_consumption за последний час:

memory_consumption[1h]

В этом примере отображаются только события потребления памяти, записанные за последний час.

Вы можете фильтровать по метке, добавляя пары ключ-значение внутри фигурных скобок:

memory_consumption{app="api"}[1h]

Встроенные функции предоставляют возможности для более точного анализа.

Вот пример, в котором функция rate() используется для расчета скорости увеличения метрики memory_consumption за выбранный период времени:

rate(memory_consumption[1h])

Доступ к данным Prometheus можно получить с помощью встроенного веб-интерфейса, обычно открываемого через порт 9090, или HTTP API.

Последний обеспечивает надежный способ получения данных из Prometheus в другие инструменты, например, в дашборды.

🗽 Интеграция Prometheus и Grafana для Мониторинга логов

Алерты

Prometheus поставляется с компонентом Alertmanager, который может отправлять вам уведомления при изменении метрик.

Он поддерживает политики на основе правил, которые определяют, когда следует отправлять оповещение.

Вы можете получать оповещения на адрес электронной почты, произвольные HTTP-вебхуки и популярные платформы обмена сообщениями, такие как Slack.

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

Alertmanager настраивается независимо от основной системы Prometheus.

Вы устанавливаете правила оповещения в Prometheus, определяя условия, когда метрика должна отправить оповещение в Alertmanager.

Последний компонент затем принимает решение о том, следует ли доставлять оповещение на каждую настроенную платформу.

 

Чего не может Prometheus?

Хотя Prometheus является комплексным решением для мониторинга, есть некоторые функции, для которых он не подходит.

Prometheus разработан с учетом надежности и производительности в качестве основных принципов.

Это приводит к компромиссам в точности показателей.

Prometheus не гарантирует, что собранные данные будут на 100% точными.

Он предназначен для сценариев с большим объемом работы, где случайные падения не влияют на общую картину.

Если вы отслеживаете важные статистические данные, которые должны быть точными, вам следует использовать другую платформу для этих показателей. Вы можете использовать Prometheus для менее важных значений в вашей системе.

Кроме того, Prometheus может быть не единственным компонентом, который вам нужен в вашем стеке мониторинга.

Он сосредоточен на хранении и запросе ваших событий, в основном с использованием HTTP API.

Встроенный веб-интерфейс предоставляет базовые возможности построения графиков, но не может поддерживать продвинутые пользовательские панели.

Сценарии визуализации данных обычно решаются путем развертывания параллельно экземпляра Grafana, который предоставляет возможности построения информационных панелей и анализа метрик со встроенной интеграцией с Prometheus.

Заключение

В самом простом виде Prometheus – это хранилище данных временных рядов, которое можно использовать для управления любыми последовательными данными, основанными на времени.

Чаще всего он используется для мониторинга метрик других приложений в вашем стеке.

Хотя Prometheus является эффективной системой для хранения и запроса метрик, он обычно интегрируется с другими решениями для создания графических панелей и расширенных визуализаций.

Его популярность объясняется способностью работать с пользовательскими метриками, поддерживать насыщенные запросы и взаимодействовать с другими участниками экосистемы облачных решений.

Добавить комментарий