Installer un serveur Munin sur Debian
Munin est un outil générant des graphiques d'utilisation des ressources système et réseau au fil du temps. Il est utile pour surveiller la charge globale d'un serveur en fonction des heures de la journées, et des jours du mois. Ce guide vous aide à mettre en place Munin sur Debian.
Ce guide est testé sur:
- Debian 6.0 Squeeze
- Debian 7.0 Wheezy
Pré-requis
Ce guide nécessite :
- un serveur HTTP Apache 2 avec le script a2tools disponible dans le guide Installer Apache 2 sur Debian.
Paramètres
Renseignez le nom de domaine ou sera disponible l'application:
DOMAIN="munin.domaine-exemple.fr"
Renseignez le nom du certificat SSL à utiliser pour chiffrer l'application avec HTTPS (créé via la procédure Créer un certificat SSL / TLS sur Debian) (optionnel, recommandé):
SSL_KEY_NAME="${DOMAIN}"
Paramètres de sécurisation
Si vous disposez d'une connexion Internet avec adresse IP fixe, renseignez votre adresse IP:
USER_FIXED_IP="xx.xx.xx.xx"
Vous pouvez obtenir votre adresse IP actuelle sur le site monip.org.
Renseignez un nom d'utilisateur utilisé lorsque vous n'êtes pas à votre domicile/travail:
USER_NAME="admin"
Installation
Installez le serveur de supervision:
command apt-get install munin apg apache2-utils
Désactivez l'hôte local pour obtenir une configuration homogène:
command sed -i \
-e 's/^[ \t]*\[localhost.localdomain\]/#&/' \
-e 's/^[ \t]*address 127.0.0.1/#&/' \
-e 's/^[ \t]*use_node_name yes/#&/' \
'/etc/munin/munin.conf'
Désactivez les accès chiffrés, si vous ne les utilisez pas:
echo '# Disable TLS tries.
tls disabled' \
> '/etc/munin/munin-conf.d/000-no-tls.conf'
Rechargez la configuration de Munin:
/etc/init.d/munin-node restart
Ajoutez à nouveau l'hôte local, comme décrit par Installer un nœud Munin sur Debian.
Configuration du serveur HTTP
Détectez les options de protection spécifiées:
command test "${USER_NAME}" = "username" && USER_NAME=""
command test "${USER_FIXED_IP}" = "xx.xx.xx.xx" && USER_FIXED_IP=""
Générez un mot de passe aléatoire pour votre utilisateur:
command test -n "${USER_NAME}" && USER_PASSWORD="$(command apg -q -a 0 -n 1 -M NCL)"
Créez le dossier destiné à contenir le fichier des mots de passe:
command test -n "${USER_NAME}" && command mkdir --parent '/etc/apache2/passwords'
Créez le fichier de mot de passe pour votre domaine:
command test -n "${USER_NAME}" && command htpasswd -cb "/etc/apache2/passwords/${DOMAIN}.pwd" "${USER_NAME}" "${USER_PASSWORD}"
Créez la configuration de protection du site selon les paramètres fournis:
if [ -n "${USER_NAME}" ]; then
SECURITY="
# Protect default access
Order deny,allow
Deny from all
# Auth configuration
# Allow auth either by user, or by IP
Satisfy any
# We enable password authentication
AuthType Basic
AuthName \"${DOMAIN} Apache 2 status pages\"
AuthUserFile /etc/apache2/passwords/${DOMAIN}.pwd
Require valid-user
# Allow access from user main Internet connexion
#Allow from ${USER_FIXED_IP}/32"
else
if [ -n "${USER_FIXED_IP}" ]; then
SECURITY="
# Protect default access
Order deny,allow
Deny from all
# Allow access from user main Internet connexion
#Allow from ${USER_FIXED_IP}/32"
else
SECURITY="
# No protection on access
Order deny,allow
Allow from all"
fi
fi
Générez la configuration de l'hôte virtuel:
VHOST_CONFIG="
DocumentRoot /var/cache/munin/www
<Location />
${SECURITY}
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault M310
</IfModule>
</Location>
"
Déterminez l'option SSL:
SSL_OPTION=""
if [ -e "/etc/ssl/private/${SSL_KEY_NAME}.key" ]; then
SSL_OPTION="--ssl=${SSL_KEY_NAME}"
fi
Configurez Apache 2:
command a2tools --template="custom" ${SSL_OPTION} "${DOMAIN}" "${VHOST_CONFIG}"
Mettez en place la redirection http vers https, si nécessaire:
if [ -e "/etc/ssl/private/${SSL_KEY_NAME}.key" ]; then
command a2tools --template="redirect" "${DOMAIN}" "https://${DOMAIN}/"
fi
Activez l'autorisation de votre adresse IP si vous avez renseigné cette valeur:
if [ -n "${USER_FIXED_IP}" ]; then
command sed -i -e "s/#Allow from ${USER_FIXED_IP}/Allow from ${USER_FIXED_IP}/" \
"/etc/apache2/sites-available/http"*"-${DOMAIN}"
fi
Vérifiez la nouvelle configuration d'Apache 2:
command apache2ctl -t
Rechargez la configuration d'Apache 2:
/etc/init.d/apache2 reload
La commande qui suit affiche les paramètres de connexion:
echo "URL: http://${DOMAIN}/
Identifiant : ${USER_NAME}
Mot de passe : ${USER_PASSWORD}"
Optimisation
Stockage des fichiers de données en mémoire
Important: Effectuez cette optimisation une fois que vous avez ajouté tous vos nœuds Munin au serveur. Bien que ce guide prévoie une marge de sécurité, elle n'est pas suffisamment importante pour supporter un ajout massif de nœuds.
Munin stocke les données récoltées dans des fichiers RRD (pour Round Robin Database). Ces fichiers sont optimisés pour le stockage de données statistiques destinées à la génération de graphiques. Lorsqu'un serveur Munin récolte les données de plusieurs nœuds clients (plus d'une dizaine), lors de la mise à jour des fichiers RRD, les accès disques sont importants, et peuvent entraîner un ralentissement du serveur. Pour optimiser ce processus, il suffit de stocker les fichiers RRD sur un système de fichier temporaire (c.a.d. un disque mémoire). Les accès disques ne sont plus utilisés car toute la mise à jour se fait en mémoire.
Attention: Assurez vous de disposer de suffisamment de mémoire vive disponible pour stocker les fichiers RRD:
echo "Mémoire vive nécessaire : $(( $(command du --summarize "/var/lib/munin" \
| command tr "\t" " " \
| command cut --delimiter=" " --field=1) \
* 120 / 100 )) ko"
Installez les outils nécessaires:
command apt-get install rsync
Configurez les tâches automatisées (cron) de gestion des fichiers RRD:
command wget 'https://raw.github.com/biapy/howto.biapy.com/master/munin/munin-rrd-cache.cron' \
--quiet --no-check-certificate --output-document='/etc/cron.d/munin-rrd-cache'
Téléchargez le script Init.d de gestion du cache RRD:
command wget 'https://raw.github.com/biapy/howto.biapy.com/master/munin/munin-rrd-cache.init-d' \
--quiet --no-check-certificate --output-document='/etc/init.d/munin-rrd-cache'
command chmod +x '/etc/init.d/munin-rrd-cache'
Ce script init.d calcule la taille utilisée par les fichiers RRD de Munin, et y ajoute 20% par sécurité. Il crée le système de fichier temporaire, copie les fichiers rrd existants sur le système de fichier temporaire, puis configure Munin pour l'utiliser.
Ajoutez le script init.d au démarrage du système:
command update-rc.d munin-rrd-cache defaults 02 06
Attention: L'ajout de ce script au démarrage du système augmente fortement le temps de démarrage. C'est un mal nécessaire pour optimiser les performances de Munin.
Configurez Munin pour stocker les données sur un système de fichier temporaire (cela peut prendre du temps):
/etc/init.d/munin-rrd-cache start
Génération des graphiques à la demande
Dans le cas de la mise en place d'un serveur Munin générant les graphiques de plusieurs hôtes, il est préférable de générer les graphiques à la demande. Sans cela, les graphiques sont générés toutes les 5 minutes et causent une charge CPU extrêmement importante.
Installez la bibliothèque Perl nécessaire:
command apt-get install libcgi-fast-perl
Installez le module Apache 2 nécessaire et activez le:
if [ ! -e '/etc/apache2/mods-enabled/fastcgi.load' ]; then
command apt-get install libapache2-mod-fcgid libcgi-fast-perl
command a2enmod fcgid
fi
Téléchargez la version corrigée du script FastCGI:
if [ -e '/usr/lib/cgi-bin/munin-fastcgi-graph' ]; then
command dpkg-divert --divert '/usr/lib/cgi-bin/munin-fastcgi-graph.dpkg-orig' \
--rename '/usr/lib/cgi-bin/munin-fastcgi-graph'
command wget 'https://raw.github.com/biapy/howto.biapy.com/master/munin/munin-fastcgi-graph' \
--quiet --no-check-certificate --output-document='/usr/lib/cgi-bin/munin-fastcgi-graph'
command chmod +x '/usr/lib/cgi-bin/munin-fastcgi-graph'
fi
Déterminez les scripts CGI à utiliser:
MUNIN_CGI_GRAPH='/usr/lib/munin/cgi/munin-cgi-graph'
command test -e '/usr/lib/cgi-bin/munin-fastcgi-graph' \
&& MUNIN_CGI_GRAPH='/usr/lib/cgi-bin/munin-fastcgi-graph'
Ajoutez les lignes nécessaires au fichier de configuration du domaine Munin:
command sed -i -e "/<\/VirtualHost>/i\\
ScriptAlias /munin-cgi-graph ${MUNIN_CGI_GRAPH}\\
<Location /munin-cgi-graph>\\
<IfModule mod_fastcgi.c>\\
SetHandler fastcgi-script\\
</IfModule>\\
<IfModule mod_fcgid.c>\\
SetHandler fcgid-script\\
</IfModule>\\
</Location>\\
" "/etc/apache2/sites-available/http"*"-${DOMAIN}"
Rechargez la configuration d'Apache 2:
/etc/init.d/apache2 force-reload
Ajustez les permissions des fichiers journaux (si nécessaire):
if [ -e '/usr/lib/cgi-bin/munin-fastcgi-graph' ]; then
command chgrp www-data '/var/log/munin' '/var/log/munin/munin-graph.log'
command chmod g+w '/var/log/munin' '/var/log/munin/munin-graph.log'
fi
Configurez la rotation des journaux en conséquence (si nécessaire):
if [ -e '/usr/lib/cgi-bin/munin-fastcgi-graph' ]; then
command sed -i \
-e '/munin-graph.log/,/640 munin adm/{s/640 munin adm/660 munin www-data/}' \
'/etc/logrotate.d/munin'
fi
Autorisez la génération des graphiques par le serveur HTTP (si nécessaire):
if [ -e '/usr/lib/cgi-bin/munin-fastcgi-graph' ]; then
command echo "#"'!'"/bin/bash
# Update permissions for fastcgi/cgi grapher.
command chgrp -R www-data '/var/cache/munin/www' command chmod -R g+w '/var/cache/munin/www'" \
> '/usr/share/munin/munin-cgi-permissions-fix'
command chmod +x '/usr/share/munin/munin-cgi-permissions-fix'
command echo "# Fix permissions for newly added hosts.
*/5 * * * * root if [ -x /usr/share/munin/munin-cgi-permissions-fix ]; then /usr/share/munin/munin-cgi-permissions-fix; fi" \
> '/etc/cron.d/munin-cgi-permissions-fix'
/etc/init.d/cron reload
/usr/share/munin/munin-cgi-permissions-fix
fi
Activez la génération à la demande des graphiques par CGI pour limiter la charge du serveur:
echo "# Generating graphs on demand.
graph_strategy cgi
cgiurl /
cgiurl_graph /munin-cgi-graph" \
> '/etc/munin/munin-conf.d/000-graph_strategy.conf'
Patientez quelques minutes que les pages HTML soit mises à jour, et testez la nouvelle configuration.
Résolution des problèmes
Tester la récupération des valeurs
Pour déboguer la récupération des valeurs par le serveur Munin, lancez la commande:
command su - munin --shell="/bin/bash" \
-c "/usr/share/munin/munin-update --debug" \
> "/tmp/munin-update.log" 2>&1
Analysez le journal généré avec :
command view "/tmp/munin-update.log"
Remerciements
- Merci aux développeurs de Munin.
- Merci à GitHub pour l'hébergement des fichiers utilisés par ce guide.
- Merci à Debian or not to be ? 2.0 pour Munin, le top du monitoring !.
- Merci à Nyro pour Graphique d'utilisation du serveur : Munin (Serveur Web sur Debian Squeeze).
- Merci à Mundane Idiosyncrasies pour How to configure a virtualized Munin server to monitor 100+ servers in CentOS/RHEL.