Munin : l'outil de supervision sans fioritures
Installation sous Debian et Ubuntu
Explications
L'application munin se compose de 2 parties :
- Munin (master pour les systèmes BSD qui sont plus explicites) qui se charge de générer les pages web et de réaliser les graphiques à partir des données...
- fournies par Munin node qui se charge à l'aide de "sondes" écrites en perl ou en shell script de générer les fichiers RRD qui vont bien. Le démon écoute par défaut sur le port TCP 4949.
Installation
Munin est dans les dépôts, donc rien à compiler. Sans toucher au fichier Preferences d'APT, installer munin tire le master et munin-node avec lui. On se positionne sur le schéma le plus simple : munin et munin-node sur la même machine.
Certains plugins tiers peuvent nécessiter des programmes additionnels (bien souvent en perl, comme ceux requis pour surveiller nginx).
Configuration basique
On édite /etc/munin.conf par exemple, sachant que la page web affichera monfqdn.demondomaine.grd :
Oui, IPv6 roulaize.
Sécurité :
La configuration par défaut du paquet Debian fait écouter le démon munin-node sur toutes les interfaces réseaux. Il serait peut-être intéressant de limiter l'écoute à la boucle locale en éditant /etc/munin-node.conf :
Configuration du CGI
Depuis la version 2.0 (et même un peu avant mais passons), munin sait générer des graphiques ainsi que des pages web de façon dynamique en lieu et place d'une bête tâche cron. Par la suite, je détaillerai seulement la génération dynamique des graphiques et pas celles des pages web dont le comportement parfois aléatoire (au moins avec la version de munin fournie avec Wheezy) était désespérant.
On repère les lignes intéressantes dans /etc/munin.conf :
graph_strategy cgi
#graph_strategy cron
cgiurl_graph /munin-cgi/munin-cgi-graph
#Important pour le serveur web
On installe spawn-fcgi :
On récupère les fichiers d'init. Attention, ce sont des scripts sysvinit, écrits à l'époque de Wheezy et jamais retouchés depuis : ils passent encore via la couche de compatibilité de systemd, mais sur une distribution récente il vaut mieux en faire une vraie unit, voir Créer son service systemd.
sudo wget http://files.julienschmidt.com/public/cfg/munin/spawn-fcgi-munin-html
sudo wget http://files.julienschmidt.com/public/cfg/munin/spawn-fcgi-munin-graph
wget "https://wiki.mirtouf.fr/lib/exe/fetch.php?media=munin:munin-cgi.tar.gz" -O munin-cgi.tar.gz
Le premier est optionnel mais permet de mettre en place une génération dynamique des pages web (c'est le même principe).
À modifier dans le fichier spawn-fcgi-munin-graph :
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=spawn-fcgi-munin-graph
PID_FILE=/var/run/munin/$NAME.pid
SOCK_FILE=/var/run/munin/$NAME.sock
SOCK_USER=www-data
FCGI_USER=www-data
FCGI_GROUP=www-data
FCGI_WORKERS=2
DAEMON=/usr/bin/spawn-fcgi
DAEMON_OPTS="-s $SOCK_FILE -F $FCGI_WORKERS -U $SOCK_USER -u $FCGI_USER -g $FCGI_GROUP -P $PID_FILE -- /usr/lib/munin/cgi/munin-cgi-graph"
L'utilisateur du script doit être le même que celui du serveur web et la configuration de munin.conf doit être en accord avec la dernière ligne.
Ne pas oublier d'activer le ou les scripts et rendre persistant leur démarrage.
- Configuration du vhost nginx
Exemple pour l'adresse suivante : http://munin.fqdn.grd
server {
server_name munin.fqdn.grd;
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
server {
server_name munin.fqdn.grd;
root /var/cache/munin/www;
http2 on;
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/ssl/private/certificate.crt;
ssl_certificate_key /etc/ssl/private/certificate.key;
index index.html;
rewrite ^([^.]*[^/])$ $1/ permanent;
location /munin/static/ {
alias /etc/munin/static/;
}
include /etc/nginx/conf.d/cache;
location ^~ /munin-cgi/munin-cgi-graph/ {
fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/run/munin/spawn-fcgi-munin-graph.sock;
include fastcgi_params;
}
location ~ /'.ht {
allow 127.0.0.1;
deny all;
}
}
En cas de génération dynamique des pages web :
location /munin/ {
fastcgi_split_path_info ^(/munin)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/munin/fcgi-html.sock;
include fastcgi_params;
}
Redémarrage des services
sudo systemctl restart munin-node.service
sudo systemctl restart nginx.service
sudo systemctl restart spawn-fcgi-munin-graph.service
sudo systemctl restart spawn-fcgi-munin-html.service
Test grandeur nature
Aller faire un tour sur la page http://munin.fqdn.grd - des jolis graphiques cliquables devraient apparaître sous peu.