diff --git a/HowtoMunin.md b/HowtoMunin.md new file mode 100644 index 00000000..8370a00b --- /dev/null +++ b/HowtoMunin.md @@ -0,0 +1,394 @@ +[[PageOutline]] + +# Howto Munin + + + +## Installation + +~~~ +# aptitude install munin +~~~ + +Munin ajoute un cron, qui s'exécute toutes les 5 minutes, il se situe dans `/etc/cron.d`. + +## Configuration + +### Configuration générale + +Le fichier `/etc/munin/munin.conf` permet de configurer munin. Par défaut les graphs sont générés dans `/var/cache/munin/www`, on peut soit le changer, soit faire un lien symbolique dans `/var/www`. + +Changer le nom d'hôte : + +~~~ +# a simple host tree +[monserveur.mondomaine.com] + address 127.0.0.1 + use_node_name yes +~~~ + +## Fonctionnement + +Toutes les 5 minutes, munin va aller interroger ses "nodes" listés dans munin.conf (par défaut uniquement localhost.localdomain). +Il va ainsi mettre à jour ses fichiers RRD stockés dans /var/lib/munin/ puis générer des graphes en PNG à partir des fichiers RRD. +Ces graphes PNG, stockés dans /var/cache/munin se retrouveront affichés dans des pages HTML, également générées. + +### Fichiers RRD + +Les fichiers RRD sont les données les plus importantes, ils stockent en effet toutes les valeurs du passé. + +À chaque plugin est associé un ou plusieurs fichiers RRD. + +~~~ +% ls *load-* +localhost.localdomain-load-load-g.rrd +% ls *cpu-* +localhost.localdomain-cpu-idle-d.rrd localhost.localdomain-cpu-iowait-d.rrd localhost.localdomain-cpu-irq-d.rrd localhost.localdomain-cpu-nice-d.rrd +localhost.localdomain-cpu-softirq-d.rrd localhost.localdomain-cpu-steal-d.rrd localhost.localdomain-cpu-system-d.rrd localhost.localdomain-cpu-user-d.rrd +~~~ + +Si vous n'avez que les fichiers RRD (cas d'une sauvegarde par exemple), vous pouvez recréer des graphes via _rrdtool_. +Voici un exemple pour tracer un graphe de load sur un intervalle passé : + +~~~ +% rrdtool graph foo.png -a PNG --start -15d --end -4d --width 800 --height 800 'DEF:load=localhost.localdomain-load-load-g.rrd:42:AVERAGE' 'LINE1:load#ff0000:Load' -l 0 -u 1 +~~~ + +## Munin 2 + +Munin 2 permet enfin de zoomer sur les graphiques ! + +Pour que cela fonctionne il faut faire tourner un démon FastCGI et le script munin-cgi-graph. + +### Intégration avec Nginx + +Adapter les droits de `/var/log/munin/munin-cgi` : + +~~~ +# chown www-data:munin /var/log/munin/munin-cgi-* +# chmod 660 /var/log/munin/munin-cgi-* +~~~ + +De même pour `/etc/logrotate.d/munin`, section `/var/log/munin/munin-cgi-graph.log` : + +~~~ +create 660 www-data munin +~~~ + +Démarrer le démon FastCGI avec spawn-fcgi (paquet à installer) : + +~~~ +spawn-fcgi -s /var/run/munin/spawn-fcgi-munin-graph.sock -U www-data -u munin -g munin /usr/lib/munin/cgi/munin-cgi-graph +~~~ + +On le mettra dans /etc/rc.local pour le lancer au démarrage de la machine (un script d'init bien fait est disponible sur +En Debian 8 on pourra créer une unité systemd : + + +~~~ +[Unit] +Description=Munin zoom for nginx. +After=network.target + +[Service] +ExecStart=/usr/bin/spawn-fcgi -s /var/run/munin/spawn-fcgi-munin-graph.sock -U www-data -u munin -g munin /usr/lib/munin/cgi/munin-cgi-graph +Type=forking + +[Install] +WantedBy=default.target +~~~ + + +Enfin dans le vhost concerné d'Nginx, ajoutez-ceci : + +~~~ +location /munin/ { + alias /var/cache/munin/www/; +} + +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:/var/run/munin/spawn-fcgi-munin-graph.sock; + include fastcgi_params; +} +~~~ + +### Avec Apache + +Installer libapache2-mod-fcgid puis ajouter au vhost : + +~~~ +# Munin cgi + # Ensure we can run (fast)cgi scripts + ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph + + Options +ExecCGI + + SetHandler fcgid-script + + + SetHandler fastcgi-script + + + + SetHandler cgi-script + + + Allow from all + +~~~ + +## Plugins + +Les plugins sont stockés dans `/usr/share/munin/plugins`. +Les plugins activés sont mis en place via un lien symbolique dans `/etc/munin/plugins/`. + +Exemple : + +~~~ +$ ls -lha /etc/munin/plugins/ +[…] +lrwxrwxrwx 1 root root 40 3 juin 10:31 apache_accesses -> /usr/share/munin/plugins/apache_accesses +[…] +~~~ + +Pour ajouter un plugin à grapher il suffit donc de mettre en place un lien symbolique. +Il faut ensuite redémarrer munin-node : `/etc/init.d/munin-node restart` + +### Tester un plugin + +Il peut être utile, et recommandé de tester le plugin avant de le mettre en place, pour cela il faut utiliser l'outil `munin-run --debug nom_du_plugin`. + +Exemple : + +~~~ +$ munin-run --debug swap +# Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node +# Set /rgid/ruid/egid/euid/ to /111/65534/111 111 /65534/ +# Setting up environment +# About to run '/etc/munin/plugins/swap' +swap_in.value 19 +swap_out.value 53 +~~~ + +### Configurer le user/group d'un plugin + +Selon les besoins, il peut être utile d'exécuter un plugin avec un utilisateur et un groupe particuliers. +Pour cela il faut éditer le fichier `/etc/munin/plugin-conf.d/munin-node` et changer le user/group. + +Exemple : + +~~~ +[munin_stats] +user munin +group munin +~~~ + +## Utiliser plusieurs fois un plugin + +Il est possible d'utiliser plusieurs fois un même plugin mais avec des paramètres différents. C'est très utile pour le plugin MySQL par exemple. + + +~~~ +/etc/munin/plugins# for type in bytes queries slowqueries threads; do for instance in 3307 3309; do ln -s /usr/share/munin/plugins/mysql_${type} mysql_${instance}_${type}; done; done +/etc/munin/plugins# ls -lha mysql_330* +lrwxrwxrwx 1 root root 36 Jul 22 11:23 mysql_3307_bytes -> /usr/share/munin/plugins/mysql_bytes +lrwxrwxrwx 1 root root 38 Jul 22 11:23 mysql_3307_queries -> /usr/share/munin/plugins/mysql_queries +lrwxrwxrwx 1 root root 42 Jul 22 11:23 mysql_3307_slowqueries -> /usr/share/munin/plugins/mysql_slowqueries +lrwxrwxrwx 1 root root 38 Jul 22 11:23 mysql_3307_threads -> /usr/share/munin/plugins/mysql_threads +lrwxrwxrwx 1 root root 36 Jul 22 11:23 mysql_3309_bytes -> /usr/share/munin/plugins/mysql_bytes +lrwxrwxrwx 1 root root 38 Jul 22 11:23 mysql_3309_queries -> /usr/share/munin/plugins/mysql_queries +lrwxrwxrwx 1 root root 42 Jul 22 11:23 mysql_3309_slowqueries -> /usr/share/munin/plugins/mysql_slowqueries +lrwxrwxrwx 1 root root 38 Jul 22 11:23 mysql_3309_threads -> /usr/share/munin/plugins/mysql_threads +~~~ + +Puis dans le fichier /etc/munin/plugin-conf.d/mysql_multi : + +~~~ +[mysql_3307_*] +user root +env.mysqlopts --defaults-extra-file=/etc/mysql/debian.cnf -h127.0.0.1 -P3307 + +[mysql_3309_*] +user root +env.mysqlopts --defaults-extra-file=/etc/mysql/debian.cnf -h127.0.0.1 -P3309 +~~~ + + +## Le plugin postgresql + +Installer libdbd-pg-perl + +~~~ +# aptitude install libdbd-pg-perl +~~~ + +Linker les plugins généraux : + +~~~ +ln -s /usr/share/munin/plugins/postgres_bgwriter /etc/munin/plugins/ +ln -s /usr/share/munin/plugins/postgres_checkpoints /etc/munin/plugins/ +ln -s /usr/share/munin/plugins/postgres_connections_db /etc/munin/plugins/ +ln -s /usr/share/munin/plugins/postgres_users /etc/munin/plugins/ +ln -s /usr/share/munin/plugins/postgres_xlog /etc/munin/plugins/ +~~~ + +Pour les plugins wildcard finissant par _ ajoutez _ALL pour monitorer toutes les BDD : + +~~~ +ln -s /usr/share/munin/plugins/postgres_cache_ /etc/munin/plugins/postgres_cache_ALL +ln -s /usr/share/munin/plugins/postgres_connections_ /etc/munin/plugins/postgres_connections_ALL +ln -s /usr/share/munin/plugins/postgres_locks_ /etc/munin/plugins/postgres_locks_ALL +ln -s /usr/share/munin/plugins/postgres_querylength_ /etc/munin/plugins/postgres_querylength_ALL +ln -s /usr/share/munin/plugins/postgres_size_ /etc/munin/plugins/postgres_size_ALL +ln -s /usr/share/munin/plugins/postgres_transactions_ /etc/munin/plugins/postgres_transactions_ALL +~~~ + +sauf les suivants qui ne peuvent analyser qu'une seule base de données : + +~~~ +ln -s /usr/share/munin/plugins/postgres_scans_ /etc/munin/plugins/postgres_scans_NOMBDD +ln -s /usr/share/munin/plugins/postgres_tuples_ /etc/munin/plugins/postgres_tuples_NOMBDD +~~~ + +Attention avec Squeeze LTS, la version du serveur contient lts (ex: PostgreSQL 8.4.22lts5) et le plugin ne fonctionne plus. +Il faut modifier le fichier /usr/share/perl5/Munin/Plugin/Pgsql.pm et remplacer la ligne : + +~~~ +unless ($v =~ /^PostgreSQL (\d+)\.(\d+)\.(\d+) on/); +~~~ +par : + +~~~ +unless ($v =~ /^PostgreSQL (\d+)\.(\d+)\.(\d+)lts(\d) on/); +~~~ + +### Le plugin dnsresponsetime + +Il faut éditer le fichier `/etc/munin/plugin-conf.d/munin-node` et ajouter la section du plugin pour spécifier un nom à résoudre et un ou des serveurs DNS : + +~~~ +[dnsresponsetime] +env.queries evolix.fr@ns2.evolix.net evolix.fr@romario.evolix.net +~~~ + +### Le plugin bind_rndc + +Ajouter les lignes suivante dans `/etc/munin/plugin-conf.d/munin-node` + +~~~ +[bind9_rndc] +user root +env.querystats /var/chroot-bind/var/cache/bind/named.stats +~~~ + +Assurez-vous d'avoir configuré le fichier named.stats, voir [wiki:HowtoBind#Graphsdesstatsviarndc configuration de bind]. + +### Le plugin bind + +Assurez-vous d'avoir configurer un « channel de log » pour les requêtes DNS. Cf. [wiki:HowtoBind#Graphsdesacc%C3%A8sviaunfichierdelog configuration de bind]. + +Ajouter les lignes suivante dans `/etc/munin/plugin-conf.d/munin-node` + +~~~ +[bind9] +user root +env.logfile /var/chroot-bind/var/log/queries.log +~~~ + +Attention au chemin si bind est chrooté ! + +Un bug nécessite de créer le fichier des infos munin à la main… + +~~~ +# cd /var/lib/munin/plugin-state/ +# touch bind9.state +# chown munin:munin bind9.state +# chmod 664 bind9.state +~~~ + +### Le plugin tomcat + +~~~ +# ln -s /usr/share/munin/plugins/tomcat_ tomcat_jvm +# ln -s /usr/share/munin/plugins/tomcat_ tomcat_threads +# ln -s /usr/share/munin/plugins/tomcat_ tomcat_volume +# ln -s /usr/share/munin/plugins/tomcat_ tomcat_access +# ln -s /usr/share/munin/plugins/tomcat_ tomcat_avgtime +# ln -s /usr/share/munin/plugins/tomcat_ tomcat_maxtime +~~~ + +~~~ +[tomcat_*] +env.host 127.0.0.1 +env.port 8080 +env.request /manager/status?XML=true +env.user admin +env.password mon_pass +env.timeout 30 +~~~ + +### Le plugin squid + +~~~ +ln -s /usr/share/munin/plugins/squid_cache /etc/munin/plugins/ +ln -s /usr/share/munin/plugins/squid_icp /etc/munin/plugins/ +ln -s /usr/share/munin/plugins/squid_objectsize /etc/munin/plugins/ +ln -s /usr/share/munin/plugins/squid_requests /etc/munin/plugins/ +ln -s /usr/share/munin/plugins/squid_traffic /etc/munin/plugins/ +~~~ + +Ajuster le port si nécessaire : + +~~~ +[squid*] +env.squidhost 127.0.0.1 +env.squidport 80 +~~~ + +S'assurer que les directives suivantes sont bien présentes dans /etc/squid3/squid.conf : + +~~~ +# munin +acl manager proto cache_object + allow manager localhost + deny manager +~~~ + +Vérification : + +~~~ +squidclient -p 80 cache_object://127.0.0.1/storedir +squidclient -p 80 cache_object://127.0.0.1/server_list +squidclient -p 80 cache_object://127.0.0.1/info +squidclient -p 80 cache_object://127.0.0.1/counters +~~~ + +## Débug + +Soucis droits sur images. Si munin n'affice pas les images, c'est peut-être un souci de droits. Vérifier les droits dans /var/cache/munin/www/*/*/. Si les .png sont en 600, faire ceci : + +~~~ +# echo "umask 022" >> /etc/default/cron +# /etc/init.d/cron restart +# chmod 644 /var/cache/munin/www/*/*/*.png +~~~ + +On peut lancer la generation des graphs à la main pour avoir des informations plus précises : + +~~~ +su - munin --shell=/bin/bash +/usr/share/munin/munin-update --debug +~~~ + + +### Tester le plugin + +~~~ +$ muninrun -d #présent dans /etc/munin/plugins/ +~~~ + +### Regarder dans la doc + +`$ munindoc `