Ziirish's Home :: Blog

Ziirish's Pub

 
 

Munin c'est bien, comme je le disais plus haut, mais ça a tendance à être un peu gourmand en ressources.

Alors sur un parc d'une petite dizaine de machines comme le mien, on a dit que Nagios c'était trop gros (en plus, j'ai pas encore de serveur de mail donc ça me sert un peu à rien pour le moment). Mais Munin c'est un peu "limite", et du coup, les graphs sont pas hyper représentatifs.

Pour revenir rapidement sur mon infrastructure, j'ai mon dom0 qui héberge mes domU dédiés (bdd, web, front, proxy, etc.), et mon Munin tourne sur une de ces VM. Sachant que la machine derrière tout ça n'est pas un foudre de guerre, un proc de récup qui doit pas avoir loin de 5-6ans, 4GB de RAM, et 3 Disques SATA (dont 2 en raid1 avec un LVM par dessus pour héberger les VM). Bref, c'est pas une tuerie, mais ça me suffit :)

Le problème donc, c'est que munin fait sa collecte d'infos toutes les 5 minutes via cron, que toutes mes VM sont synchronisées à l'aide de NTP, et qu'il graph toutes les 5 minutes. On a donc toutes les sondes lancées en même temps sur toutes les VM et toutes les données récoltées, compilées et "graphées" simultanément. Bref, un beau bordel, et un bon pompage de ressources. Du coup, les graphs sont générés au moment où la machine est la plus chargée, et donc le résultat n'est pas représentatif.

En plus de ça, le fait que toutes les VM s’excitent en même temps fait hurler le serveur comme une oie toutes les 5 minutes, bref, c'est assez vite chiant.

Du coup, la "solution" que j'ai trouvée, c'est de :

    limiter la consommation CPU du "grapher" diminuer la fréquence des graphs

Après tout, j'ai pas le nez rivé sur mes graphs toute la journée, je peux donc me permettre de passer de un graph toutes les 5 minutes à un graph toutes les 20 minutes.

Pour ce faire, on édite les fichier /usr/bin/munin-cron qui est appelé par cron toutes les 5 minutes. Le miens ressemble désormais à ça :


#!/bin/sh
CPT=3
TMP="/tmp/munin-graph.cpt"
[ -x /usr/share/munin/munin-update ] && /usr/share/munin/munin-update $@;
[ -x /usr/share/munin/munin-limits ] && /usr/share/munin/munin-limits $@;
if [ "$(wc -l $TMP|awk '{ print $1; }')" -ge "$CPT" ]
then
    >$TMP
    [ -x /usr/share/munin/munin-graph  ] &&
        (/usr/share/munin/munin-graph --cron $@ 2>&1 |
        fgrep -v "*** attempt to put segment in horiz list twice")&
        cpulimit -P /usr/bin/perl -l 50 -z
    [ -x /usr/share/munin/munin-html   ] && nice /usr/share/munin/munin-html $@;
else
    echo ".">>$TMP
fi

Ensuite, on installe cpulimit . Dans le script ci-dessus, je demande à cpulimit de limiter perl à utiliser au maximum 50% du CPU. Le script munin-graph étant un script perl, il sera limité à 50%.

Et voici le résultat :

cpu-atlas.png

cpu-atlas.png (direct link)

load-atlas.png

load-atlas.png (direct link)