Monitoring avec Munin 2

dim. 15 juin 2014 by Marmotte

Munin est un outil de monitoring qui affiche l'activité des machines surveillées sous forme de graphiques. Il est constitué d'une machine maître, qui affiche les informations, et de noeuds, installés sur les machines à surveiller.

Installation

Sous Debian, il suffit d'installer le paquet munin pour le maître. Il est aussi nécessaire de disposer d'un serveur web, pour afficher les graphiques, j'utilise Apache 2 pour cette tâche.

$ sudo apt-get install --no-install-recommends munin apache2

Sur les machines à surveiller, il faut installer le paquet munin-node.

$ sudo apt-get install --no-install-recommends munin-node

Note : Pour Debian Squeeze, Munin 2 n'est disponible que dans le dépôt backports :

deb http://backports.debian.org/debian-backports squeeze-backports main

Configuration du serveur maître

Configuration de Munin 2

La configuration de Munin est située dans le fichier /etc/munin/munin.conf. Dans les paquets Debian, les fichiers contenus dans le répertoire /etc/munin/munin-conf.d/ sont inclus automatiquement. Comme je n'aime pas modifier les fichiers installés par défaut, je ferais donc toutes mes configurations dans des fichiers que je crée dans ce répertoire.

Les paramètres par défaut me conviennent, je déclare donc uniquement les machines que le serveur Munin devra surveiller. La configuration basique d'un hôte se présente donc sous la forme d'un fichier /etc/munin/munin-conf.d/<Hostname>.conf et contient :

[<NodeGroup>;<NodeName>]
    address <NodeAddress>
    use_node_name yes

Note : Pour se connecter en SSH sur un noeud, la ligne address sera :

address ssh://<Hostname> -W localhost:<MuninPort>

Création d'une clé SSH

Pour autoriser la connexion en SSH sur les noeuds, il est nécessaire de créer une clé SSH à l'utilisateur munin.

$ sudo -u munin ssh-keygen -t dsa

La clé publique se trouve alors dans le fichier ~munin/.ssh/id_dsa.pub.

Configuration d'Apache 2

Pour permettre la consultation des graphiques générés par Munin, il suffit de créer un vhost apache pointant vers le répertoire défini comme htmldir dans la configuration du serveur maître Munin.

Comme le serveur de monitoring ne sert qu'à ça, et n'est accessible que depuis le LAN, j'ai fait un vhost apache très simple, mais absolument pas sécurisé, basé sur le fichier /etc/munin/apache.conf. Pour faire un serveur accessible publiquement, il peut être nécessaire d'ajouter quelques vérifications.

<VirtualHost *:80>
    DocumentRoot /var/cache/munin/www

    <Directory /var/cache/munin/www>
        <IfModule mod_expires.c>
            ExpiresActive On
            ExpiresDefault M310
        </IfModule>
    </Directory>

    # Enables fastcgi for munin-cgi-graph if present
    ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
    <Location /munin-cgi/munin-cgi-graph>
        <IfModule mod_fastcgi.c>
            SetHandler fastcgi-script
        </IfModule>
    </Location>

    ScriptAlias /munin-cgi/munin-cgi-html /usr/lib/munin/cgi/munin-cgi-html
    <Location /munin-cgi/munin-cgi-html>
        <IfModule mod_fastcgi.c>
            SetHandler fastcgi-script
        </IfModule>
    </Location>
</VirtualHost>

Recevoir des alertes

Par défaut, lorsque des valeurs arrivent hors des limites définies par les plugins, si des limites sont définies, Munin les affiche dans son interface. Il est possible d'indiquer à Munin d'envoyer automatiquement des alertes par email, pour les rendre plus visibles.

Munin peut lancer une commande lorsqu'une alerte est émise. En lui donnant l'utilitaire mail comme commande, il enverra un email à l'adresse spécifiée :

contact.email.command mail -s "Munin notification ${var:host}" email@example.com

Par défaut, Munin envoie une unique alerte. Si on veut recevoir une alerte à chaque mise à jour des graphiques, il faut le préciser dans la configuration :

contact.email.always_send critical

Note : J'ai ici demandé d'envoyer les alertes critiques en boucle, mais pas les warnings. Il est possible de préciser warning aussi dans la ligne pour recevoir aussi les warnings en boucle.

Pour définir une alerte personnalisée pour un hôte précis, il y a plusieurs syntaxes :

<PluginName>.<VariableName>.[warning/critical] <Value>
<PluginName>.<VariableName>.[warning/critical] [<Min>:<Max>]

Les valeurs dépendent du plugin. Par exemple, pour le plugin df (utilisation disque en pourcentage), si on veut recevoir un warning dès que la partition nommée _ dépasse 90%, il faut mettre :

df._.warning 90

Note : Le nom à mettre est le nom interne à Munin. Il peut être trouvé losqu'on clique sur un graphique dans l'interface web, dans la colonne "Internal name" du tableau qui se trouve en bas.

Configuration des machines à surveiller

La configuration d'un noeud se trouve dans le fichier /etc/munin/munin-node.conf. La configuration par défaut me convient, je n'ai donc effectué aucune modification

Connexion en SSH

Pour autoriser la connexion du serveur maître en SSH, il faut ajouter la clé SSH de l'utilisateur munin du maître sur l'utilisateur munin de la machine à surveiller. L'installation du paquet munin-node ne crée pas le homedir de l'utilisateur munin automatiquement, il faut donc le faire manuellement :

$ sudo mkdir -p ~munin/.ssh
$ sudo chown -R munin:munin ~munin

Nous pouvons maintenant copier la clé SSH du serveur maître, dans le fichier ~munin/.ssh/authorized_keys.

Il est ensuite nécessaire d'ajouter la clé de la machine à surveiller dans la liste des hôtes connus du serveur maître. Le plus simple pour cela est de tenter la connexion SSH manuellement depuis le serveur maître :

$ sudo -u munin ssh <Hostname>

Activation des plugins

Pour définir les éléments qui seront surveillés, il faut activer les plugins correspondants. Un bon nombre de plugins est fournis par le paquet munin-plugins-core, disponibles dans le répertoire /usr/share/munin/plugins/. Il suffit de faire des liens symboliques vers ces plugins dans le répertoire /etc/munin/plugins/ pour les activer.

D'autres plugins sont proposés dans le paquet munin-plugins-extra.

Note : Après l'activation d'un plugin, il est nécessaire de relancer le noeud :

$ sudo service munin-node restart

Configuration des plugins

Certains plugins nécessitent une configuration spécifique. Les configurations nécessaires aux plugins fournis par les paquets Debian sont disponibles dans le fichier /etc/munin/plugin-conf.d/munin-node.

Il est possible d'ajouter d'autres fichiers dans ce répertoire pour fournir une configuration aux plugins personnalisés.

Utilisation des plugins de la communauté

Un dépôt de plugins communautaires est disponible sur GitHub : https://github.com/munin-monitoring/contrib

J'ai pour habitude de le cloner dans le répertoire utilisateur de munin :

$ sudo -u munin -s
$ cd
$ git clone https://github.com/munin-monitoring/contrib.git

Il est ensuite possible d'utiliser les plugins de ce dépôt en créant des liens symboliques dans le répertoire /etc/munin/plugins/.

Remarques générales

Monitoring de PostgreSQL

Pour le monitoring de PostgreSQL, il est nécessaire d'installer le paquet libdbd-pg-perl.