Как настроить push-уведомления для сервисов?

«Как настроить push-уведомления для сервисов?» — вопрос из категории Мониторинг и логирование, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps-практике push-уведомления настраиваются, в первую очередь, для алертов мониторинга и событий CI/CD. Я использую стек Prometheus + Alertmanager как стандарт де-факто.

Базовая настройка алертинга:

  1. В Prometheus определяю правила алертов в alert_rules.yml:
    groups:
    - name: example
      rules:
      - alert: HighPodMemoryUsage
        expr: sum(container_memory_working_set_bytes{pod!=""}) by (pod) / sum(kube_pod_container_resource_limits{resource="memory"}) by (pod) > 0.9
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Pod {{ $labels.pod }} memory usage is above 90%"
  2. В Alertmanager (alertmanager.yml) настраиваю маршрутизацию и получателей:
    route:
      group_by: ['alertname', 'cluster']
      receiver: 'slack-notifications'
    receivers:
    - name: 'slack-notifications'
      slack_configs:
      - api_url: 'https://hooks.slack.com/services/XXX/YYY/ZZZ'
        channel: '#alerts-prod'
        title: '{{ .GroupLabels.alertname }}'
        text: '{{ range .Alerts }}{{ .Annotations.summary }}n{{ end }}'
    - name: 'pagerduty'
      pagerduty_configs:
      - routing_key: 'your_pagerduty_integration_key'

Для CI/CD событий (например, в GitLab CI) настраиваю webhook-уведомления о неудачных пайплайнах или успешных деплоях в тот же Slack или Microsoft Teams:

# Пример фрагмента .gitlab-ci.yml
notify_on_failure:
  stage: .post
  script:
    - |
      if [ "$CI_JOB_STATUS" = "failed" ]; then
        curl -X POST -H 'Content-Type: application/json' --data "{"text":"Pipeline $CI_PIPELINE_ID for $CI_PROJECT_NAME failed."}" $SLACK_WEBHOOK_URL
      fi
  when: on_failure

Главный принцип — уведомления должны быть информативными, с указанием сервиса, severity и ссылкой на дашборд или лог для быстрой диагностики.