Vous êtes ici : Accueil / Debian GNU/Linux / Applications Web / Supervision / Installer un serveur Munin sur Debian

Installer un serveur Munin sur Debian

Par Pierre-Yves Landuré Dernière modification 02/03/2018 18:04

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 :

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