395 lines
12 KiB
Markdown
395 lines
12 KiB
Markdown
|
[[PageOutline]]
|
||
|
|
||
|
# Howto Munin
|
||
|
|
||
|
<http://munin-monitoring.org/wiki/Documentation>
|
||
|
|
||
|
## 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 <http://files.julienschmidt.com/public/cfg/munin/spawn-fcgi-munin-graph).>
|
||
|
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
|
||
|
<Location /munin-cgi/munin-cgi-graph>
|
||
|
Options +ExecCGI
|
||
|
<IfModule mod_fcgid.c>
|
||
|
SetHandler fcgid-script
|
||
|
</IfModule>
|
||
|
<IfModule mod_fastcgi.c>
|
||
|
SetHandler fastcgi-script
|
||
|
</IfModule>
|
||
|
<IfModule !mod_fastcgi.c>
|
||
|
<IfModule !mod_fcgid.c>
|
||
|
SetHandler cgi-script
|
||
|
</IfModule>
|
||
|
</IfModule>
|
||
|
Allow from all
|
||
|
</Location>
|
||
|
~~~
|
||
|
|
||
|
## 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
|
||
|
<http_access> allow manager localhost
|
||
|
<http_access> 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 <plugin> #présent dans /etc/munin/plugins/
|
||
|
~~~
|
||
|
|
||
|
### Regarder dans la doc
|
||
|
|
||
|
`$ munindoc <plugin>`
|