Ответ
Я активно использовал 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.