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

Как появился Prometheus

Управление бизнесом без знания цифр — невозможно. Для принятия взвешенных решений нужно знать ключевые бизнес-метрики: выручку, прибыль, количество заказов, количество активных пользователей, плюс как можно больше менее значимых параметров: распределение активности пользователей по регионам, самые популярные продукты на сайте, загрузка серверов. Только владея всей этой аналитической информацией можно понять, где вы находитесь в море бизнеса и куда нужно грести.

В 2012 году онлайн-платформа для распространения звуковых треков SoundCloud озадачилась поиском нового инструмента для аналитики. Взвесив все варианты и попробовав всё, что было на рынке в тот момент, в компании принялись за разработку своего решения.

В то время аналитические СУБД были либо слишком сложными, либо слишком ненадежными и медленными. В то же время начал набирать популярность язык Go. Система сбора метрик на Go могла стать на порядок круче аналогов, поэтому разработчики из SoundCloud решили написать собственный инструмент на нем.

Решение оказалось хорошим: сейчас Prometheus — самая быстрая и мощная система для сбора аналитики.

Почему для сбора метрик нельзя использовать, скажем, MySQL?

Можно! Если у вас небольшой проект, малое количество значений в аналитике и данные редко обновляются — еще как можно. В остальных случаях стандартные СУБД не могут обеспечить нужной производительности и надежности. Все эти классные штуки типа индексов и транзакций, важные в других случаях, только замедляют работу базы данных, от которой требуется максимальная скорость и безотказность в записи метрик.

Поэтому для систем аналитики разработали концепцию time series database — систему хранения простых значений, привязанных к определенным моментам времени. У любой базы при таком подходе будет два измерения — момент времени и сами значения. Такой предельно простой подход к структуре хранимой информации позволяет заранее спланировать алгоритмы поиска и обработки значений, а также выжать максимальную скорость работы и надежность. Пространство состояний, в которых может находиться такая СУБД, предельно мало и хорошо описано.

Такой подход к внутренней архитектуре базы данных позволяет быстро записывать большое количество различных метрик и выполнять хитрые статистические запросы, показывающие динамику этих метрик во времени. Поскольку эти операции — единственное предназначение Prometheus, то и выполняются они максимально шустро. Обычные СУБД рассчитаны на широкий спектр задач по записи и обработке данных, поэтому проигрывают по скорости при работе с наборами метрик.

Одна маленькая особенность Прометеуса

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

У этого «обратного» подхода есть плюсы и минусы. Плюсы — в том, что у вас всегда есть единая точка конфигурирования системы сбора статистики, и в этой точке можно описать полный набор сервисов, у которых надо собирать метрики. Это удобно! Минус же в том, что для каждого сервиса нужен специальный интерфейс, к которому Prometheus сможет обращаться со своими запросами, — это неудобно, трудоемко и не всегда возможно.

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

Сервер Prometheus опрашивает целевые объекты, забирая из них метрики — то есть определенные параметры этих объектов. Для визуализации метрик используют разные инструменты, например Grafana

Как пользоваться мониторингом Prometheus

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

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

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

Prometheus очень дружит с Kubernetes, что сильно упрощает дело по сбору и анализу состояний кластера приложений.

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