Prometheus alerte sur cpu usage kernel faux positifs

cjacques 24/07/2024
RÉSOLU
cjacques
Auteur
Avatar de cjacques
cjacques
Auteur

Salut les sres j'ai un souci avec nos alertes cpu sur prometheus. on a des serveurs qui alertent pour cpu usage > 80% mais quand je me co dessus le top montre que c'est le kernel qui bosse genre 50-60% de temps en 'system' ou 'iowait' et nos apps sont peinardes. comment on filtre ça pour avoir des alertes pertinentes sur le vrai usage appli ?

# exemple de notre alerte
(1 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m]))) * 100 > 80
24/07/2024 à 22:18

7 commentaires

benoit-lemonnier
Membre Actif
Avatar de benoit-lemonnier
benoit-lemonnier
Membre Actif

salut. ouais le cpu 'system' et 'iowait' c'est le piège. la métrique node_cpu_seconds_total agrège tout. pour avoir l'usage appli tu dois exclure certains modes. le mode="idle" c'est bien mais il inclut aussi le iowait dedans si mes souvenirs sont bons.

Modifié le 23/05/2026 à 16:20
jacques-gilbert
Membre Actif
Avatar de jacques-gilbert
jacques-gilbert
Membre Actif

non idle c'est le temps où le cpu fait rien. iowait c'est le cpu qui attend de l'io. un cpu en iowait n'est pas utilisé par ton appli. il attend. donc si iowait est haut ton app est bloquée sur de l'io pas sur du calcul.

Modifié le 23/05/2026 à 16:20
benoit-lemonnier
Membre Actif
Avatar de benoit-lemonnier
benoit-lemonnier
Membre Actif

ah oui my bad iowait est une catégorie à part entière. donc si tu veux le cpu actif utile à tes apps tu devrais faire mode!="idle" et mode!="iowait" et mode!="steal" si t'es en vm.

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

ok je vois la nuance. donc si j'ai bien compris je devrais exclure idle et iowait de mon calcul ? et steal si je suis en VM. on est sur des vms donc je vais ajouter steal aussi.

Modifié le 23/05/2026 à 16:20
benoit-lemonnier
Membre Actif
Avatar de benoit-lemonnier
benoit-lemonnier
Membre Actif

exactement. ta query devrait ressembler à un truc du genre :

100 - (avg by (instance) (rate(node_cpu_seconds_total{mode=~"idle|iowait|steal"}[5m])) * 100)
ça te donnera le pourcentage de cpu qui est réellement utilisé pour faire du travail utile (user + system non-iowait).

Modifié le 23/05/2026 à 16:20
jacques-gilbert
Membre Actif
Avatar de jacques-gilbert
jacques-gilbert
Membre Actif

ouais ou plus simple tu peux sommer les modes qui t'intéressent genre sum by (instance) (rate(node_cpu_seconds_total{mode=~"user|system"}[5m])) * 100 si tu veux juste user et system pur hors iowait/idle.

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

j'ai testé la première query avec mode=~"idle|iowait|steal" et ça change tout. les alerts sont beaucoup plus pertinentes maintenant. c'était un vrai point de douleur. merci les gars c'est top !

Modifié le 23/05/2026 à 16:20

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