# cagull-rrdtools ## Prérequis Paquets Debian à installer : * `sysstats` * `rrdtools` ## TL;DR ``` while true; do make update graph; sleep 60; done ``` Toutes les minutes ça va produire les images des graphes. Certes à terme l'update sera appellé par cron et le graph idéalement à la demande. ## Objectif On cherche à mesurer les métriques de la machine virtuelle pour avoir une idée de ce qui s'y passe. ## Quelles métriques ? Ce serait bien de mesurer : * l'utilisation de la puissance du processeur et le load average * la consommation de mémoire * l'utilisation de l'espace disque * la consommation de bande passante (descendante et montante) ## Quelle période ? Ce serait bien d'avoir une vue par jour, par semaine, par mois et par an. ## Comment mesurer ? On pourrait utiliser `sysstat` dont cest le boulot de remonter des statistiques sur l'utilisation des ressources et est livré par défaut sur la machine virtuelle. Le paquet existe dans Debian. Pour le mettre en place il faut veiller à ce que `ENABLED="true"` soit présent dans `/etc/sysstat/sysstat`. Pour prendre un changement de configuration en compte ne pas oublier de redémarrer le service correspondant avec `systemctl restart sysstat` en tant que `root`. Dès lors on peut obtenir des mesures avec la commande `sar`. Par exemple : ``` # sar -u ALL 0 -1 Linux 5.10.0-10-amd64 (ldlc) 09/01/2022 _x86_64_ (4 CPU) 18:42:18 CPU %usr %nice %sys %iowait %steal %irq %soft %guest %gnice %idle 18:42:18 all 3,57 0,02 1,27 0,06 0,00 0,00 0,03 0,00 0,00 95,05 ``` Pour voir la consommation de CPU, mais on peut éggalement obtenir le *load average* avec `-q LOAD`, la consommation de mémoire avec `-r ALL`, la consommation de disque avec `-F MOUNT` (attention il peut y avoir autant de lignes que de systèmes de fichiers montés) et on ne trouve pas ce que l'on cherche pour le réseau. On se replira sur la solution traditionnelle l'ancienne : ``` # cat /proc/net/dev Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo: 863221523 11015143 0 0 0 0 0 0 863221523 11015143 0 0 0 0 0 0 eth0: 471552305 1062734 0 4 0 0 0 0 38744992 102635 0 0 0 0 0 0 docker0: 5243766 2526 0 0 0 0 0 0 367641 3211 0 0 0 0 0 0 veth3cae73a: 4008409 1953 0 0 0 0 0 0 287234 2526 0 0 0 0 0 0 ``` On a donc toutes les données de mesure que l'on voulait. ## Stocker les mesures On utilise les RRDTools pour stocker et tracer les données. ### Créer les bases cpu load mem fs net ``` rrdtool create cpu.rrd --start $(date +%s) --step 60 --no-overwrite \ DS:user:GAUGE:120:0:100 \ DS:nice:GAUGE:120:0:100 \ DS:sys:GAUGE:120:0:100 \ DS:iowait:GAUGE:120:0:100 \ DS:steal:GAUGE:120:0:100 \ DS:irq:GAUGE:120:0:100 \ DS:soft:GAUGE:120:0:100 \ DS:guest:GAUGE:120:0:100 \ DS:gnice:GAUGE:120:0:100 \ DS:idle:GAUGE:120:0:100 \ RRA:LAST:0.5:1:1440 \ RRA:AVERAGE:0.5:420:1440 \ RRA:AVERAGE:0.5:1860:1440 \ RRA:AVERAGE:0.5:21900:1440 ``` ``` rrdtool update cpu.rrd $(date +%s):$(LANG=C sar -u ALL 0 -1 |tail -n1 |awk '{print $3,$4,$5,$6,$7,$8,$9,$10,$11,$12}' |tr ' ' ':'); ``` Dans un `while true; do …; sleep 60; done` ``` rrdtool graph cpu-daily.svg --imgformat SVG --end now --start end-86400s \ DEF:user=cpu.rrd:user:AVERAGE \ DEF:nice=cpu.rrd:nice:AVERAGE \ DEF:sys=cpu.rrd:sys:AVERAGE \ DEF:iowait=cpu.rrd:iowait:AVERAGE \ DEF:steal=cpu.rrd:steal:AVERAGE \ DEF:irq=cpu.rrd:irq:AVERAGE \ DEF:soft=cpu.rrd:soft:AVERAGE \ DEF:guest=cpu.rrd:guest:AVERAGE \ DEF:gnice=cpu.rrd:gnice:AVERAGE \ DEF:idle=cpu.rrd:idle:AVERAGE \ AREA:user#FF0000:user:STACK \ AREA:nice#FF1111:nice:STACK \ AREA:sys#FF2222:sys:STACK \ AREA:iowait#FF3333:iowait:STACK \ AREA:steal#FF4444:steal:STACK \ AREA:irq#FF5555:irq:STACK \ AREA:soft#FF6666:soft:STACK \ AREA:guest#FF7777:guest:STACK \ AREA:gnice#FF8888:gnice:STACK \ AREA:idle#00FF00:idle:STACK ``` Il faudra trouver des jolies couleurs. Et éviter le blanc parce qu'il n'est pas tracé. ## Notes Pour vider les caches mémoire : `echo 2 > /proc/sys/vm/drop_caches`, cf [la doc](https://www.kernel.org/doc/html/latest/admin-guide/sysctl/vm.html#drop-caches)