Prometheus alerte CPU spikes bizarrement

leon20 21/05/2025
RÉSOLU
leon20
Auteur
Avatar de leon20
leon20
Auteur

salut

on a des alertes prometheus qui pètent sur des cpu spikes genre node_cpu_seconds_total qui monte en flèche d'un coup

mais quand je regarde les graphes grafana l'utilisation cpu moyenne est genre 20%

genre ça : sum(rate(node_cpu_seconds_total{mode!="idle", instance="mon_serveur"}[5m])) by (instance) / sum(node_cpu_seconds_total{instance="mon_serveur"}[5m]) by (instance)

l'alerte est genre cpu_usage > 0.8 pour 5 min

vous avez déjà eu ça ? j'ai l'impression qu'il y a un truc qui cloche avec la métrique ou la règle

21/05/2025 à 06:34

10 commentaires

omarechal
Membre Actif
Avatar de omarechal
omarechal
Membre Actif

hmm ça sent le problème d'agrégation

si t'as plusieurs cores sur ton serveur node_cpu_seconds_total est par core

ton alerte regarde la somme de tous les cores non idle et la divise par la somme de tous les cores (idle inclus)

si un seul core spike à 100% ton agrégat sur tous les cores fera moins de 100%

ton calcul semble déjà aggreger mais t'es sûr de la division par le total incluant idle

Modifié le 23/05/2026 à 16:20
meyer-mathilde
Membre Rédacteur
Avatar de meyer-mathilde
meyer-mathilde
Membre Rédacteur

oui c ça le piège avec node_cpu_seconds_total

faut bien diviser par le nombre de cpus

essaie avec (sum(rate(node_cpu_seconds_total{mode!="idle",instance="mon_serveur"}[5m])) by (instance) / count(node_cpu_seconds_total{mode="idle",instance="mon_serveur"}) by (instance)) * 100

ça te donnera le % d'utilisation moyenne sur tous les cores

Modifié le 23/05/2026 à 16:20
costa-jules
Membre
Avatar de costa-jules
costa-jules
Membre

ou un truc plus simple

100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle",instance="mon_serveur"}[5m])) * 100)

ça c'est le % d'utilisation cpu moyenne globale

si tu veux détecter des spikes par core alors faut pas agréger par instance mais par cpu et instance

Modifié le 23/05/2026 à 16:20
christelle28
Membre Actif
Avatar de christelle28
christelle28
Membre Actif

oui exactement l'alerte doit être par core si tu veux détecter un seul core à 100%

genre rate(node_cpu_seconds_total{mode!="idle",instance="mon_serveur",cpu="0"}[5m]) / rate(node_cpu_seconds_total{instance="mon_serveur",cpu="0"}[5m]) pour le core 0

faut faire une boucle sur les cpus ou une alerte par cpu

Modifié le 23/05/2026 à 16:20
leon20
Auteur
Avatar de leon20
leon20
Auteur

ok je vois mon erreur en fait je voulais la moyenne globale mais j'ai une app qui peut saturer un core unique et ça me flingue toute l'instance si je rate ça

donc je dois faire une alerte qui détecte un core unique à +80% pendant 5min

et une autre alerte pour l'utilisation cpu moyenne globale

25/05/2025 à 21:53
omarechal
Membre Actif
Avatar de omarechal
omarechal
Membre Actif

précisément

pour le per-core spike une règle comme ça :

# prometheus rule
- alert: highcpucoreusage
  expr: 100 - (rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100) > 80
  for: 5m
  labels:
    severity: warning
  annotations:
    summary: "cpu core {{ $labels.instance }} ({{ $labels.cpu }}) usage is high"
    description: "cpu core usage for instance {{ $labels.instance }} ({{ $labels.cpu }}) has been above 80% for 5 minutes."

ça va t'alerter sur chaque core qui dépasse le seuil

26/05/2025 à 16:23
meyer-mathilde
Membre Rédacteur
Avatar de meyer-mathilde
meyer-mathilde
Membre Rédacteur

oui mais fait attention ça peut être bruyant si t'as beaucoup de cpus et des apps qui font des burst sur des cores différents

tu peux ajouter un group by (instance) ou group by (instance, job) pour agréger les alertes par machine si tu veux pas une alerte par core à chaque fois

mais si ton besoin c de capter un core unique à 100% alors la règle de user_key:2 est bien

Modifié le 23/05/2026 à 16:20
costa-jules
Membre
Avatar de costa-jules
costa-jules
Membre

perso j'utilise souvent topk pour identifier les N cores les plus occupés

mais pour une alerte simple la règle 100 - (rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100) est nickel

juste assure-toi d'avoir les bonnes étiquettes (labels) pour l'instance et le cpu

Modifié le 23/05/2026 à 16:20
leon20
Auteur
Avatar de leon20
leon20
Auteur

ok j'ai refait mes règles avec la suggestion de user_key:2 et c beaucoup plus pertinent maintenant

j'ai une alerte pour l'usage global de l'instance et une autre pour les cores individuels

les fausses alertes ont disparu

29/05/2025 à 03:09
leon20
Auteur
Avatar de leon20
leon20
Auteur

top merci beaucoup à tous pour l'aide c'était super clair

29/05/2025 à 23:24

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