Ответ
Я активно использовал Prometheus для мониторинга и алертинга в микросервисной архитектуре. Мой опыт включает:
-
Инструментация приложений: Добавлял кастомные метрики в Go-сервисы с помощью библиотеки
prometheus/client_golang. Основные типы метрик, с которыми я работал:Counter: для подсчета событий (например, общее число HTTP-запросов).Gauge: для измерения текущего значения (например, количество активных горутин).Histogram: для отслеживания распределения значений (например, время ответа на запрос).Summary: похож на гистограмму, но вычисляет квантили на стороне клиента.
// Пример метрики для отслеживания количества HTTP-запросов с метками (labels) httpRequestsTotal := prometheus.NewCounterVec( prometheus.CounterOpts{ Name: "http_requests_total", Help: "Total number of HTTP requests.", }, []string{"method", "path", "status_code"}, ) -
Настройка Exporter'ов: Конфигурировал и запускал стандартные экспортеры для сбора метрик с инфраструктурных компонентов, таких как
node_exporter(для хостов),postgres_exporterиredis_exporter. -
Написание PromQL-запросов: Создавал сложные запросы в PromQL для построения дашбордов в Grafana и для правил алертинга. Например, расчет 99-го перцентиля времени ответа или вычисление процента ошибок.
-
Конфигурация Alertmanager: Настраивал правила алертинга в Prometheus и управлял их маршрутизацией, группировкой и отправкой через Alertmanager в Slack, PagerDuty и другие системы.
-
Работа с экосистемой: В проектах с высокими требованиями к хранению данных использовал Thanos для долгосрочного хранения метрик и создания глобального представления данных с нескольких кластеров Prometheus. Для сбора метрик с короткоживущих batch-задач применял Pushgateway.
Ответ 18+ 🔞
А, ну, вот это да, про Prometheus! Ну, это ж моя родная стихия, блядь, как родная хата. Сидел, сука, в микросервисах, как сыч, и мониторил всё, что шевелится. Опыт, блядь, богатый, сейчас тебе разложу по полочкам, как я с этим добром управлялся.
Сначала, конечно, инструментация приложений. Это когда ты в каждый сервис на Go лезешь с библиотекой prometheus/client_golang и начинаешь везде счётчики втыкать. Типа, вот тут запрос пришёл — щёлк! Тут ошибка — щёлк! Как будто учётную книжку ведёшь, только для железяк, блядь.
Основные штуки, с которыми возился, это:
Counter— чтобы просто посчитать, сколько раз что-то случилось. Запросы там, ошибки. Тупо плюсует.Gauge— это типа стрелка на приборе. Сейчас вот столько горутин, а через секунду — уже другое. Пляшет, сука.HistogramиSummary— а вот это уже серьёзные ребята. Чтобы замерять, не сколько, а как долго. Время ответа, блядь. Гистограмма бакеты нарезает, а Summary сразу квантили считает. Разница, конечно, есть, но если вкратце — оба про «ой, как медленно всё работает, ёпта».
Вот, смотри, как это в коде выглядит, простыня наша священная:
// Создаём счётчик, который будет считать запросы, и к нему метки цепляем — метод, путь, код ответа.
httpRequestsTotal := prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "http_requests_total",
Help: "Total number of HTTP requests.",
},
[]string{"method", "path", "status_code"},
)
Потом, блядь, экспортеры. Это такие шпионы, которые на саму инфраструктуру цепляются. node_exporter — на сервер, чтобы знать, сколько памяти жрёт, postgres_exporter — в базу, redis_exporter — в кэш. Ставишь эту мартышку, и она тебе сама всё вытаскивает. Красота, в рот меня чих-пых!
Дальше — самое интересное, PromQL-запросы писать. Это когда ты уже не просто метрики собираешь, а начинаешь с ними шаманить. Строишь в Grafana графики, которые показывают не просто «запросов 1000», а «99-й перцентиль времени ответа вырос на 200 миллисекунд, потому что кто-то, блядь, кривую миграцию накатил». Или высчитываешь процент ошибок: «ой, а у нас тут каждая десятая ручка 500-ю ошибку плюёт, пора бить тревогу, ёперный театр!»
Ну и куда же без алертинга. Настроишь в Prometheus правила — мол, если процент ошибок выше 5 больше минуты — стреляй. А Alertmanager этот сигнал ловит, и начинается цирк: он его группирует (чтобы не заспамить, если всё падает разом), подавляет (если алерт уже есть, новый не слать) и раскидывает — кому в Slack, кому в PagerDuty. Чувствуешь себя диспетчером на пульте управления, только вместо самолётов — твои же сервисы, которые постоянно норовят накрыться медным тазом.
А в особо навороченных проектах, где метрик — овердохуища, и хранить их надо годами, подключал Thanos. Эта штука из нескольких разрозненных Prometheus'ов делает одну большую, глобальную картинку, да ещё и в объектное хранилище всё скидывает. А для всяких короткоживущих задач, которые сами про себя ничего не скажут, использовал Pushgateway — задача отработала и пнула в него свои метрики перед смертью, типа «я всё, ребята, вот статистика».
Вот так вот, блядь. Кажется, просто цифры собираешь, а на деле — целое государство из графиков, алертов и дашбордов строишь. Волнение ебать, когда всё зелёное, и терпения ноль ебать, когда всё вдруг красное.