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
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
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`
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`
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
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
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
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
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
Membre depuis le 20/06/2024
top merci beaucoup à tous pour l'aide c'était super clair
Vous devez être connecté pour poster un message !
Recevoir les derniers articles gratuitement en créant un compte !
S'inscrire
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