Ответ
Работал с Prometheus как с основным инструментом для сбора и хранения метрик.
Архитектура и компоненты:
- Prometheus Server: Сбор метрик по pull-модели, хранение в TSDB.
- Exporters: Использовал
node_exporterдля метрик ОС,jmx_exporterдля JVM. - Client Libraries: Интеграция в Java-приложения через Micrometer (Spring Boot Actuator).
- Alertmanager: Обработка и маршрутизация алертов.
- 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, да? Ну, это ж классика, блядь, как борщ со сметаной. Работал с ним, как с основным сборщиком метрик, пока он мне мозг не начал выносить своими гистограммами, но это уже детали.
Слушай, архитектура у него, в принципе, не сильно заумная, если разобраться.
Что там у них внутри:
- Prometheus Server: Это главный жадный мудак, который ходит и тянет (pull) метрики сам со всех, кого найдёт. Всё это безобразие складывает в свою базу временных рядов (TSDB), которая, если её не ограничивать, сожрёт всё свободное место, как голодный студент пельмени.
- Exporters: Это такие переводчики-предатели, которые сидят на целевых системах и переводят их внутренний бред на понятный Прометею язык.
node_exporter— чтобы знать, насколько твоя виртуалка обоссалась по памяти.jmx_exporter— чтобы заглянуть в кишки JVM и понять, сколько там сейчас плавает мусора. Без них нихуя не собрать. - Client Libraries: Ну а это когда ты не хочешь ставить переводчика, а учишь своё приложение говорить на языке Прометея сразу. В мире Spring Boot — это Micrometer, который торчит наружу через Actuator. Удобно, ёпта.
- Alertmanager: Отдельный сервис-истеричка. Получает от Prometheus'а сигналы "ой, всё!", и начинает орать на все возможные каналы: в Slack, в почту, в PagerDuty. Может ещё группировать эти вопли, чтобы не заспамить насмерть.
- 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.