Расскажите о вашем опыте работы с Prometheus и экосистемой мониторинга.

Ответ

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