#prometheus #prometheus-alertmanager
#prometheus #prometheus-alertmanager
Вопрос:
У меня есть кластер kubernetes, и для мониторинга и оповещений я использую Prometheus. Prometheus alertmanager продолжает повторять оповещения, пока они не станут активными. Я хочу настроить свой alertmanager так, чтобы он отправлял оповещение только один раз в slack и повторял оповещение только в случае изменения состояния оповещения
Я попытался генерировать оповещения только для определенного времени следующим образом
(kube_pod_container_status_restarts_total > 3) * ((time() % 86400 / 3600 > bool 3) == bool (time() % 86400 / 3600 <bool 4))
но у меня это не сработало
Конфигурация сервера Prometheus выглядит следующим образом:
prometheus-server.yml
alert: PodRestartAlert
expr: kube_pod_container_status_restarts_total >3
for: 5m
labels:
severity:
annotations:
description: ""
summary: 'The pods that are restarted more than 3 times'
Конфигурация Alertmanager выглядит следующим образом:
global:
slack_api_url: "http://"
receivers:
- name: default-receiver
slack_configs:
- channel: '#abc'
text: Prometheus Alert generated
route:
group_by:
- alertname
- datacenter
- app
group_interval: 5m
receiver: default-receiver
repeat_interval: 0
Я пытаюсь добиться чего-то, как показано ниже:
Если изначально есть 10 модулей, которые перезапускались более 3 раз, тогда он должен выдавать предупреждение только один раз для slack
Если через день или два количество перезапущенных модулей увеличится только до 20 модулей, менеджер оповещений должен выдать предупреждение, чтобы ослабить его тоже только один раз
Любые предложения о том, что я мог бы попробовать или изменить, были бы очень полезны
Заранее спасибо!
Ответ №1:
Вы можете использовать slack_configs.title
для создания общего сообщения, а их slack_configs.text
— для ранжирования по срабатывающим / разрешенным предупреждениям, чтобы вы могли получать несколько предупреждений одного и того же типа в одном сообщении Slack.
Кроме того, убедитесь, что установлено slack_configs.send_resolved: true
уведомление о разрешенных оповещениях.
например:
alertmanager:
config:
global:
resolve_timeout: 5m
route:
group_by:
- alertname
- datacenter
- app
group_wait: 30s
group_interval: 5m
repeat_interval: 12h
receiver: 'default-receiver'
receivers:
- name: 'default-receiver'
slack_configs:
- channel: '#abc'
send_resolved: true
title: '[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] Monitoring Event Notification'
text: |-
{{ range .Alerts }}
*Alert:* {{ .Labels.alertname }} - `{{ .Labels.severity }}`
*Description:* {{ .Annotations.summary }}
*Graph:* <{{ .GeneratorURL }}|:chart_with_upwards_trend:> *Runbook:* <{{ .Annotations.runbook_url }}|:spiral_note_pad:>
*Details:*
{{ range .Labels.SortedPairs }} • *{{ .Name }}:* `{{ .Value }}`
{{ end }}
{{ end }}
Приведенный выше пример также проходит через .Labels.SortedPairs
, создавая полный раздел «Подробности:» со всем, что связано с предупреждением о срабатывании.
Оповещения должны выглядеть следующим образом:
Дальнейшее чтение: