prometheus alertmanager trop de notifs on est spammé

Posté par zantoine le 13/06/2025
RÉSOLU

zantoine

Membre depuis le 11/02/2020

salut à tous. on est en train de se faire submerger par les alertes prometheus. c'est surtout des alerts de type

high_cpu_usage
ou
disk_space_low
. dès qu'un truc dépasse un seuil sur plusieurs serveurs ça nous spamme de notifs. on voudrait regrouper ça un peu mieux sans perdre d'infos importantes. des idées pour l'alertmanager ?

# partie receiver de notre alertmanager.yml (simplifié)
receivers:
- name: 'default-receiver'
  slack_configs:
  - channel: '#alerts-prod'
    send_resolved: true

Commentaires

mahe-suzanne

Membre depuis le 30/03/2019

salut. c'est un classique. le plus simple c'est d'utiliser le

group_by
dans ta config alertmanager. tu peux grouper par
alertname
et
cluster
par exemple si t'as un label
cluster
sur tes métriques. ça envoie une seule notif pour toutes les alertes du même type dans le même cluster

caroline-maillard

Membre depuis le 06/07/2019

et aussi les

inhibit_rules
! si tu as une alerte générale genre
cluster_down
tu peux inhiber toutes les alertes individuelles
high_cpu_usage
des machines de ce cluster. ça évite d'avoir 50 alertes quand tout le cluster est mort

mahe-suzanne

Membre depuis le 30/03/2019

voilà un exemple de

group_by
à ajouter dans ton
route
principal ou tes sous-routes:
  group_by: ['alertname', 'cluster']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
group_wait
c'est pour attendre un peu avant d'envoyer la première notif pour voir si d'autres alertes arrivent pour grouper.
group_interval
c'est la période entre les re-notifs du même groupe

zantoine

Membre depuis le 11/02/2020

ok je vais tester le

group_by
. j'ai pas de label
cluster
par contre j'ai un label
env
et
instance
je vais faire avec ça. mais pour le
high_cpu_usage
ça va regrouper toutes les instances de l'env en une seule notif ou ça fera une notif par instance toujours ?

durand-francois

Membre depuis le 16/08/2024

si tu groupes juste par

alertname
et
env
, ça va regrouper toutes les instances du même
env
pour le même
alertname
. si tu veux une notif par instance (mais groupée si plusieurs alertes pour la même instance) alors il faut inclure
instance
dans le
group_by
. mais du coup tu ne groupes plus entre instances différentes. le but est de trouver le bon granularité

zantoine

Membre depuis le 11/02/2020

voilà ma config actuelle, je voudrais regrouper par

alertname
et avoir le détail des instances dans la même notif slack
routes:
- match:
    severity: 'critical'
  receiver: 'default-receiver'
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h

mahe-suzanne

Membre depuis le 30/03/2019

d'acc. si tu groupes juste par

alertname
l'alertmanager va te donner un récap dans la notif slack. mais pour avoir les détails des instances il faut customiser le template slack de ton receiver. tu peux utiliser
{{ range .Alerts }}{{ .Labels.instance }}: {{ .Annotations.summary }}{{ end }}
par exemple pour lister toutes les instances et leurs summaries

caroline-maillard

Membre depuis le 06/07/2019

oui le templating est clé pour ça. et n'oublie pas le paramètre

for
dans tes règles prometheus. si une alerte se déclenche juste pour 10s et disparaît, tu peux mettre
for: 5m
pour qu'elle ne se déclenche qu'après 5 minutes consécutives. ça réduit beaucoup le bruit

zantoine

Membre depuis le 11/02/2020

bon j'ai appliqué le

group_by: ['alertname', 'env']
et j'ai commencé à customiser le template slack pour avoir les instances. ça va déjà beaucoup mieux le nombre de notifs est divisé par 5. je vais regarder les
inhibit_rules
et les
for
maintenant. thx tout le monde pour les tips

mahe-suzanne

Membre depuis le 30/03/2019

nickel c'est déjà un bon début. les alertes c'est un travail continu. bon courage !

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire