Ответ
В DevOps-практике push-уведомления настраиваются, в первую очередь, для алертов мониторинга и событий CI/CD. Я использую стек Prometheus + Alertmanager как стандарт де-факто.
Базовая настройка алертинга:
- В 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%" - В 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 и ссылкой на дашборд или лог для быстрой диагностики.
Ответ 18+ 🔞
Давай разберём эту всю движуху с алертами, чтобы не охуеть потом в три часа ночи от того, что всё накрылось медным тазом, а ты нихуя не в курсе.
Вот смотри, стандартный стек для этой песни — Prometheus + Alertmanager. Без них сейчас — как без рук, ёпта. Настраивается всё, в принципе, не адово, но если накосячить, то доверия ебать ноль будет от всей системы.
Как это обычно выглядит:
-
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%"Суть простая: если подъёбывает память больше 90% дольше пяти минут — готовься, щас будет волнение ебать. Главное, выражение в
exprнаписать правильно, а то будет либо молчать, как партизан, либо орать почём зря. -
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'Тут ты говоришь: «Слушай, все алерты, сгруппированные по имени и кластеру, летите в слак на канал `#alerts-prod». А если совсем пиздец (critical), то можно и в PagerDuty впендюрить, чтобы дежурный проснулся с чувством, что его ебёт медведь.
А ещё есть CI/CD, про который забывать нельзя. Ну, типа, пайплайн сломался или деплой прошёл — тоже надо знать. Тут обычно тупо вебхуки настраиваешь.
Вот смотри, кусок из .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
Всё просто: упала джоба — скрипт берет и хуярит POST-запрос в слак. И ты сразу видишь, что твой код — говно, и надо срочно фиксить, а не пить кофе.
Главный принцип, который надо высечь у себя на подкорке: уведомление должно быть таким, чтобы с первого взгляда было понятно — что сломалось, насколько это серьёзно и куда бежать смотреть логи или графики. Просто сообщение «всё плохо» — это пиздопроебибна, от которой терпения ноль ебать через пять минут. Добавляй ссылки на дашборд, метки, severity. Сделай так, чтобы дежурный не тратил полчаса на то, чтобы просто понять, в каком сервисе проблема. И тогда, может быть, тебя не пошлют на хуй в следующий раз, когда в три ночи что-то грохнется.