Prometheus alerte CPU spikes bizarrement

Posté par leon20 le 21/05/2025
RÉSOLU

leon20

Membre depuis le 20/06/2024

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

Commentaires

omarechal

Membre depuis le 03/09/2019

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

meyer-mathilde

Membre depuis le 21/07/2024

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

costa-jules

Membre depuis le 01/11/2019

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`

christelle28

Membre depuis le 20/05/2024

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`

leon20

Membre depuis le 20/06/2024

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

omarechal

Membre depuis le 03/09/2019

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

meyer-mathilde

Membre depuis le 21/07/2024

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

costa-jules

Membre depuis le 01/11/2019

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

leon20

Membre depuis le 20/06/2024

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

leon20

Membre depuis le 20/06/2024

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

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