Какой у вас опыт работы с системой мониторинга Prometheus?

Ответ

Работал с Prometheus как с основным инструментом для сбора и хранения метрик.

Архитектура и компоненты:

  1. Prometheus Server: Сбор метрик по pull-модели, хранение в TSDB.
  2. Exporters: Использовал node_exporter для метрик ОС, jmx_exporter для JVM.
  3. Client Libraries: Интеграция в Java-приложения через Micrometer (Spring Boot Actuator).
  4. Alertmanager: Обработка и маршрутизация алертов.
  5. Grafana: Визуализация метрик.

Настройка в Spring Boot (application.yml):

management:
  endpoints:
    web:
      exposure:
        include: health,metrics,prometheus
  metrics:
    export:
      prometheus:
        enabled: true
    distribution:
      percentiles-histogram:
        http.server.requests: true # Включение гистограмм для таймингов

Пример правила алерта (prometheus.yml):

groups:
  - name: example
    rules:
    - alert: HighErrorRate
      expr: rate(http_server_requests_errors_total[5m]) > 0.05
      for: 2m
      labels:
        severity: warning
      annotations:
        summary: "Высокая частота ошибок в приложении"

Почему Prometheus? Система эффективна для мониторинга динамических облачных сред благодаря service discovery, мощному языку запросов PromQL и надежной модели хранения временных рядов.

Ответ 18+ 🔞

А, Prometheus, да? Ну, это ж классика, блядь, как борщ со сметаной. Работал с ним, как с основным сборщиком метрик, пока он мне мозг не начал выносить своими гистограммами, но это уже детали.

Слушай, архитектура у него, в принципе, не сильно заумная, если разобраться.

Что там у них внутри:

  1. Prometheus Server: Это главный жадный мудак, который ходит и тянет (pull) метрики сам со всех, кого найдёт. Всё это безобразие складывает в свою базу временных рядов (TSDB), которая, если её не ограничивать, сожрёт всё свободное место, как голодный студент пельмени.
  2. Exporters: Это такие переводчики-предатели, которые сидят на целевых системах и переводят их внутренний бред на понятный Прометею язык. node_exporter — чтобы знать, насколько твоя виртуалка обоссалась по памяти. jmx_exporter — чтобы заглянуть в кишки JVM и понять, сколько там сейчас плавает мусора. Без них нихуя не собрать.
  3. Client Libraries: Ну а это когда ты не хочешь ставить переводчика, а учишь своё приложение говорить на языке Прометея сразу. В мире Spring Boot — это Micrometer, который торчит наружу через Actuator. Удобно, ёпта.
  4. Alertmanager: Отдельный сервис-истеричка. Получает от Prometheus'а сигналы "ой, всё!", и начинает орать на все возможные каналы: в Slack, в почту, в PagerDuty. Может ещё группировать эти вопли, чтобы не заспамить насмерть.
  5. Grafana: Ну это уже красивые картинки для начальства. Без неё просто циферки в столбик — скучно же, блядь.

Вот как это в приложении на Spring Boot прикручивается (application.yml):

management:
  endpoints:
    web:
      exposure:
        include: health,metrics,prometheus # Выставляем наружу нужные точки
  metrics:
    export:
      prometheus:
        enabled: true # Говорим "да, мы хотим метрики в формате для этого жадины"
    distribution:
      percentiles-histogram:
        http.server.requests: true # Включаем гистограммы для таймингов запросов, это важно для персентилей, а то потом нихуя не посчитаешь

А вот пример, как заставить его орать, если что-то пошло не так (prometheus.yml):

groups:
  - name: example
    rules:
    - alert: HighErrorRate
      expr: rate(http_server_requests_errors_total[5m]) > 0.05 # Если больше 5% ошибок за 5 минут...
      for: 2m # ...и это держится 2 минуты...
      labels:
        severity: warning # ...вешаем бирку "warning"
      annotations:
        summary: "Высокая частота ошибок в приложении" # ...и пишем человеческий текст, чтобы понять, на что орем.

А почему именно он? Да потому что для этих ваших облаков и кубернетисов — он как родной, ёбта. Сам умеет находить сервисы (service discovery), язык запросов (PromQL) мощный, можно такие аналитические кульбиты вытворять, мама не горюй. И модель хранения временных рядов у него надёжная. Короче, инструмент рабочий, хоть иногда и хочется им об стену швырнуть, когда настраиваешь retention policies.