Использование Prometheus Alertmanager для проактивного мониторинга Ci/cd
Почему проактивный мониторинг имеет значение для трубопроводов CI/CD
Непрерывная интеграция и непрерывное развертывание (CI/CD) трубопроводы образуют основу современной доставки программного обеспечения. Они автоматизируют все от интеграции кода до тестирования, создания и развертывания в производство. Когда трубопровод ломается, он может заблокировать всю команду разработчиков, отложить выпуски и, если не заметить, подтолкнуть неисправный код в производство. Опираясь на ручные проверки или реактивный мониторинг оставляет опасный пробел. Использование Prometheus Alertmanager для проактивного мониторинга CI/CD сдвигает стратегию от «исправлять его, когда он ломается» к «поймать его, прежде чем это имеет значение».
Prometheus - это ведущий инструментарий мониторинга и оповещения с открытым исходным кодом, предназначенный для надежности и масштабируемости. Его компонент оповещения, Alertmanager, выполняет сложную работу по управлению оповещениями - группирование связанных уведомлений, подавление дубликатов и маршрутизация их к нужным людям или системам. Благодаря соединению показателей Prometheus из ваших инструментов CI / CD с интеллектуальным оповещением Alertmanager вы получаете раннюю видимость в здоровье трубопровода, сбои развертывания и аномалии инфраструктуры.
Оригинальное название: Prometheus Alertmanager
Prometheus Alertmanager не является автономной системой — он работает в сотрудничестве с сервером Prometheus. Сервер собирает метрики и оценивает правила оповещения, определенные в конфигурации. Когда условие правила выполняется, оповещение отправляется в Alertmanager. Затем оповещение отправляется в Alertmanager, применяя маршрутизацию, группирование, торможение и замалчивание перед отправкой уведомлений по различным каналам: электронная почта, Slack, PagerDuty, OpsGenie, веб-хуки и многое другое.
Основные компоненты Alertmanager
- Прием внутрь: Получает предупреждения от Prometheus через HTTP API. Предупреждения включают ярлыки (например, , )) и аннотации (например, резюме, описание).
- Логика построения: Настраиваемые правила, которые объединяют подобные оповещения в единые уведомления. Например, группировать все сбои сборки по названию трубопровода и среде.
- Переходное дерево: Дерево приемников, которое решает, куда идут оповещения на основе соответствия этикетки. Оповещения могут следовать за несколькими ветвями с разными конфигурациями.
- Затишье и торможение: Временное подавление оповещений во время технического обслуживания или когда оповещения с более высоким приоритетом делают излишними оповещения с более низким приоритетом.
- Время на основе отключения: Используйте немые таймеры для подавления оповещений по расписанию (например, рутинное развертывание или ночные задания).
Как оповещения проходят через систему
- Prometheus снимает метрики с экспортеров или конечных точек (например, метрики Jenkins, метрики GitLab CI, статус Kubernetes pod).
- На основании правил оповещения, определенных в конфигурации Prometheus, условия вызывают оповещение (например, частота отказов в сборке > 5% за 10 минут).
- Алерт-менеджер получает оповещение о пожаре, применяет настройки группового ожидания и интервала, пакетные оповещения и маршрутизирует их.
- Уведомления отправляются на настроенные приемники.Ответы могут вызывать автоматические действия (например, веб-хук для перезапуска застрявшей работы).
Понимание этого потока имеет важное значение для настройки Alertmanager, чтобы избежать усталости, гарантируя, что критические события никогда не будут пропущены.
Почему именно для мониторинга CI/CD используется алтер-менеджер?
Без интеллектуального оповещения команды тонут в шумных уведомлениях - каждый один неудачный тест, медленное развертывание или прерывистый сбой сети запускает сообщение.
- Снижение шума: Группировка объединяет предупреждения из одного трубопровода или причины, поэтому одно уведомление охватывает несколько связанных с этим сбоев.
- Приоритет критических проблем: Маршрутизация может отправлять предупреждения высокой степени тяжести (например, сбой развертывания) в PagerDuty, в то время как предупреждения низкой степени тяжести идут в канал журнала Slack.
- Дедупликация по регулировке: Предотвращает повторные оповещения о том же состоянии, что является обычным явлением, когда метрики удаляются каждые 15 секунд.
- Включение окон технического обслуживания: Оповещения о тишине во время запланированного развертывания или модернизации инфраструктуры во избежание ложных тревог.
Проактивный мониторинг с помощью Alertmanager означает, что вы можете обнаружить тенденции деградации трубопровода (например, увеличение времени сборки), прежде чем они вызовут полный сбой.
Настройка Prometheus и Alertmanager для вашего трубопровода CI / CD
Внедрение надежного фундамента оповещения требует настройки как Прометея, так и Алертманагера. Ниже приведено пошаговое руководство с реальными соображениями.
Шаг 1: Разверните Прометея и Алертманджера
Если вы еще не установили Prometheus и Alertmanager. Общие подходы включают использование Docker, диаграмм Kubernetes Helm или нативных пакетов. Для простой тестовой среды вы можете использовать docker-compose:
version: '3'
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
alertmanager:
image: prom/alertmanager:latest
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
ports:
- "9093:9093"
См. официальную документацию Алерт-менеджера для конфигураций производственного уровня.
Шаг 2: Определите CI / CD-специфические метрики
Прометею нужны метрики из ваших инструментов CI/CD.
- Дженкинс: Используйте плагин метрики Прометея. Выставляет продолжительность работы, создает результаты и размеры очередей.
- GitLab CI: Используйте встроенные метрики GitLab Prometheus или экспортера GitLab для метрик бегунов.
- GitHub Actions: Нажмите пользовательские метрики через шлюз Prometheus для выполнения рабочих процессов.
- Кубернеты: Используйте kube-state-метрики для мониторинга трубопроводных контейнеров и завершения работ.
Например, для мониторинга неудач Дженкинса, выставить метрику, как со значениями 0 для успеха, 1 для неудачи.
Шаг 3: Создайте правила оповещения в Прометее
Правила оповещения - это файлы YAML, загруженные в Prometheus. Ниже приведен пример файла для конвейера CI/CD:
groups:
- name: CI/CD Alerts
rules:
- alert: BuildFailureHigh
expr: rate(jenkins_job_last_result{result="failure"}[5m]) > 0.1
for: 2m
labels:
severity: critical
annotations:
summary: "High build failure rate in pipeline {{ $labels.job }}"
description: "Build failure rate > 10% over 5 minutes for job {{ $labels.job }} in environment {{ $labels.env }}"
- alert: DeploymentDurationAnomaly
expr: histogram_quantile(0.95, rate(deployment_duration_seconds_bucket[10m])) > 300
for: 5m
labels:
severity: warning
annotations:
summary: "Deployment duration anomaly for service {{ $labels.service }}"
description: "95th percentile deployment duration exceeds 5 minutes"
Шаг 4: Настройка маршрутизации и уведомлений диспетчера
Создайте , который определяет, как обрабатываются оповещения.
route:
group_by: ['alertname', 'job', 'env']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receiver: 'default'
routes:
- match:
severity: critical
receiver: 'pagerduty-critical'
continue: true
- match:
severity: warning
receiver: 'slack-warnings'
receivers:
- name: 'pagerduty-critical'
pagerduty_configs:
- service_key: <your-pagerduty-key>
- name: 'slack-warnings'
slack_configs:
- api_url: https://hooks.slack.com/services/...
channel: '#ci-cd-alerts'
send_resolved: true
Ключевые настройки:
- group by: Группа предупреждает по месту работы и окружающей среде, чтобы избежать отдельных уведомлений для каждой неудавшейся сборки.
- group wait/interval: Контроль за задержкой пакетирования и как часто отправляются уведомления по текущим вопросам.
- repeat interval: Предотвращает усталость от оповещения, не отправляя одно и то же оповещение в течение нескольких часов, если состояние не сохраняется.
Для получения полного руководства см. документацию по конфигурации Алерт-менеджера .
Шаг 5: Интеграция с автоматизацией реагирования на инциденты
Проактивный мониторинг эффективен только в том случае, если предупреждения приводят к действию. Используйте веб-хуки в Alertmanager для запуска автоматических ответов:
- Отправьте веб-хук в инструмент, такой как Rundeck или Ansible, чтобы повторить неудачное развертывание.
- Автоматически откатитесь к последней известной хорошей сборке, когда происходит пожар с высокой степенью готовности.
- Создайте билет Jira или PagerDuty из критических оповещений.
Многие команды также используют Grafana OnCall (или аналогичный FLT: 1) для управления эскалациями и графиками вызовов поверх Alertmanager.
Расширенные функции управления оповещениями для проактивного мониторинга CI/CD
После того, как базовая маршрутизация настроена, используйте расширенные функции для точной настройки вашего мониторинга.
Правила ингибирования
Ингибирование отключает предупреждения более низкого приоритета, когда активируется предупреждение более высокого приоритета. Например, если узел Kubernetes выходит из строя (критическое предупреждение), вам не нужны предупреждения о каждом трубопроводе, который не может планировать струны (предупреждающие предупреждения). Добавьте к :
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['namespace', 'cluster']
Это уменьшает шум при каскадных отказах.
Молчание и нежные времена
Например, если вы развертываете каждый вторник в 2 часа ночи, подавите предупреждения, связанные с развертыванием, во время этого окна:
mute_time_intervals:
- name: tuesday_deploy
weekdays: ['Tuesday']
time_intervals:
- times: ['02:00', '04:00']
Ссылка на немой таймер в вашем маршруте: Это предотвращает усталость от ожидаемой оперативной деятельности.
Веб-хуки для пользовательских действий
Помимо Slack и PagerDuty, используйте веб-хуки для интеграции с внутренними инструментами. Например, приемник веб-хуков может вызывать API для автоматического перезапуска застрявшего трубопровода:
receivers:
- name: 'webhook-auto-fix'
webhook_configs:
- url: 'https://internal-api.example.com/pipeline/restart'
send_resolved: true
Ключевые показатели каждый трубопровод CI / CD должен контролировать
Чтобы определить эффективные правила оповещения, вам нужно знать, какие показатели имеют значение. В рамках DORA (DevOps Research and Assessment) определены четыре ключевых показателя:
- Частота развертывания: Как часто вы развертываете производство. Оповещение о падении ниже порога.
- Ведущее время для изменений: Время от обязательства развертывания.
- Среднее время восстановления (MTTR): Время восстановления после сбоев. Предупреждение о превышении MTTR SLA.
- Изменить частоту отказов: Процент развертываний, вызывающих сбои.
Прометей может отслеживать их через таможенных экспортеров или трубопроводы от бревна до метрики. Пример правила оповещения для МТТР:
- alert: MTTRTooHigh
expr: avg by (service) (deployment_recovery_time_seconds) > 3600
for: 10m
labels:
severity: warning
annotations:
summary: "MTTR for {{ $labels.service }} exceeds 1 hour"
Лучшие практики для оповещения на трубопроводах CI / CD
Чрезмерное оповещение является распространенной ошибкой. Следуйте этим рекомендациям, чтобы ваше оповещение было эффективным.
Определите значимые пороги
Базовые пороги по историческим данным, а не догадки. Анализ прошлых инцидентов для определения того, что представляет собой реальное предупреждение против нормальной флуктуации. Используйте динамические пороги (по правилам записи) для адаптивности.
Используйте уровни множественной верности
Карта тяжести ответных действий:
- Критический: Трубопровод полностью заблокирован или развертывание производства не удается. Требуется немедленное вмешательство человека.
- Предупреждение: Деградация производительности, увеличение частоты отказов, использование ресурсов приближается к пределу. Мониторинг в часы вызова.
- Информация: Рутинные уведомления (например, завершение технического обслуживания).
Правила предупреждения о тестировании с реальными данными
Используйте встроенные инструменты тестирования Prometheus или команду для проверки правил перед развертыванием.
Конфигурации оповещения о документах
Поддерживайте вики- или рунбуки, объясняющие цель каждого предупреждения, что делать при срабатывании и как при необходимости заставить замолчать.
Регулярно пересматривать и уточнять
Установите ежеквартальный обзор всех правил оповещения. Удалите устаревшие правила, отрегулируйте пороги и добавьте новые для измененных трубопроводов. Простота оповещения позволяет легко повторять.
Интеграция Alertmanager с популярными платформами CI/CD
Дженкинс
Установите плагин Прометей метрики , чтобы выявить количество рабочих мест, продолжительность и результаты. Предупреждение о росте размеров очередей или рабочих местах, застрявших в «зависшем» состоянии.
GitLab CI
GitLab показывает конечную точку для бегунов. Мониторинг доступности бегунов и времени выполнения трубопроводов. Для объединения запросов трубопроводов используйте пользовательские метрики через шлюз.
GitHub Действия
Поскольку GitHub Actions изначально не выставляет метрики Prometheus, push-метрики из рабочих процессов выполняются с помощью pushgateway.
# In a workflow step
- name: push metrics
run: |
echo "pipeline_status{workflow=\"deploy\",result=\"${{ job.status }}\"} 1" | curl --data-binary @- http://pushgateway:9091/metrics/job/github_actions/instance/${{ github.run_id }}
Нативные трубопроводы Kubernetes (Tekton, Argo Workflows)
Используйте для мониторинга трубопроводных контейнеров и пользовательских определений ресурсов (CRDs). Предупреждение о сбоях трубопровода или тайм-аутах TaskRun.
Обычные подводные камни и как их избежать
Даже при сильной настройке команды сталкиваются с проблемами. Вот как их перемещать:
- Усталость от аллергии: Чрезмерно чувствительные пороги или слишком много предупреждений с низкой степенью тяжести.Решение: повышение порогов, агрегированные предупреждения с группировкой и использование приглушения во время известных циклов.
- Отсутствующие критические оповещения: Неопределенные правила для определенных режимов отказа (например, бесшумные сбои сборки из-за нечетких тестов). Решение: периодически просматривать отчеты об инцидентах и добавлять соответствующие правила оповещения.
- Перегрузка уведомлений: Одно и то же оповещение, отправленное по нескольким каналам. Решение: используйте маршрутизацию тщательно — направляйте критические оповещения в PagerDuty, предупреждения в слакс, и информацию в архивы электронной почты.
- Дрифт конфигурации: Изменения конфигурации оповещения без обзора.Решение: управление версией и использование CI/CD для развертывания изменений с одобрением.
Мониторинг самого мониторинга
Прометей и Алертманеджер могут контролировать друг друга. Выставить собственные метрики Прометея и настроить оповещения о сбоях Алертманеджера (например, сбои уведомлений, прекращение тишины).
- alert: AlertmanagerNotificationFailing
expr: rate(alertmanager_notifications_failed_total[10m]) > 0.01
for: 5m
labels:
severity: critical
annotations:
summary: "Alertmanager notifications are failing"
Убедитесь, что ваш цикл мониторинга устойчив, чтобы избежать слепых зон.
Заключение
Используя Prometheus Alertmanager для проактивного мониторинга CI / CD, вы трансформируете свою способность наблюдать за трубопроводом от пассивного к активному. Настраивая хорошо настроенные правила оповещения, интеллектуальную группировку и надежную маршрутизацию, вы получаете возможность обнаруживать проблемы до их эскалации - будь то медленная сборка, аномалия развертывания или каскадный сбой инфраструктуры. Система достаточно гибкая, чтобы интегрироваться с любой платформой CI / CD, а ее природа с открытым исходным кодом означает, что вы можете адаптировать ее к своим точным потребностям без затрат на лицензирование. Инвестируйте время, чтобы правильно настроить ее, итерировать на основе реальных инцидентов, и вы уменьшите время простоя, ускорите среднее время восстановления и доставите лучшее программное обеспечение с уверенностью.