Поиск по сайту:

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


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

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

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

Что делает Прометей?

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

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

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

  • Счетчик — значение, которое постоянно увеличивается, никогда не уменьшается и не сбрасывается.
  • Датчик — значение, которое может измениться в любом направлении в любое время.
  • Гистограмма – выборка нескольких значений, представляющая сумму всех сохраненных значений, а также количество записанных событий.
  • Сводка. Сводка работает аналогично гистограмме, но поддерживает настраиваемые квантили для совокупного мониторинга за скользящие периоды времени.

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

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

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

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

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

Вы можете отслеживать собственные метрики вашего приложения, написав свой собственный экспортер. При таком подходе действительно нет ограничений — вы можете фиксировать время, проведенное на целевой странице, объем продаж, количество регистраций пользователей или что-то еще, что имеет значение для вашей системы.

Экспортеры — это простые конечные точки 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 поставляется с компонентом Alertmanager, который может отправлять вам уведомления при изменении показателей. Он поддерживает политики на основе правил, которые определяют, когда следует отправлять предупреждение.

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

Alertmanager настраивается независимо от основной системы Prometheus. Вы настраиваете правила оповещения в Prometheus, определяя условия, при которых метрика должна отправлять оповещение в Alertmanager. Затем последний компонент решает, следует ли доставлять оповещение на каждую настроенную платформу.

Чего не может Прометей?

Хотя Prometheus — это комплексное решение для мониторинга, для некоторых задач оно не подходит. Основными принципами Prometheus являются надежность и производительность. Это приводит к компромиссам в точности метрик.

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

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

Заключение

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

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

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