Monitoring complet de votre serveur personnel avec Monitorix

Exemple de graphique généré par Monitorix (ici la charge système).

Exemple de graphique généré par Monitorix (ici la charge système).

Je ne sais pas vous, mais quand j’administre mes machines, j’aime bien avoir la possibilité de surveiller les ressources et services essentiels proposés par celles-ci en un clin d’œil. Et comme je ne dispose pas non plus d’un cloud complet ou de baies… J’ai opté pour une solution simple et légère, me proposant tout un panel de graphiques pour observer en temps réel les statistiques de mes deux petits serveurs.

Cet outil s’appelle Monitorix, il est très sobre, très joli, très clair et très complet. Il est écrit en perl et repose principalement sur l’utilisation de rrdtool. Une fois configuré, toutes vos statistiques seront accessibles via une interface web que vous pourrez sécuriser via HTTPS et authentification 🙂

Installation et configuration

Installation via les dépôts

Étant sous Debian, Monitorix n’est pas encore présent dans les dépôts officiels. C’est un dépôt maison qu’il va falloir ajouter à vos sources (/etc/apt/sources.list) :

echo "deb http://apt.izzysoft.de/ubuntu generic universe" >> /etc/apt/sources.list

Puis sa clé publique :

wget -O - http://apt.izzysoft.de/izzysoft.asc | sudo apt-key add -

Mettez à jour les dépôts puis installez 🙂

sudo apt-get update && sudo apt-get install monitorix

Configuration du VHost Apache

Monitorix est livré avec son propre serveur web, mais comme j’ai d’autres services web sur mon serveur et que je souhaite garder une url « propre » (pas de :8080 à la fin), j’ai préféré utiliser Apache. Cette partie est donc complètement facultative mais permet par exemple de mettre en place une couche SSL (pas détaillé ici) et un système d’authentification.

On imagine que je prépare mon vhost pour l’url monitorix.domaine.com, voici à quoi ressemblerait le fichier /etc/apache/sites-available/monitorix.domaine.com.conf :

<VirtualHost *:80>
        ServerAdmin     admin@domaine.com
        ServerName      monitorix.domaine.com
        DocumentRoot    /var/lib/monitorix/www
 
        # J'ai désactivé les logs mais changez le chemin si vous souhaitez en avoir
        ErrorLog        /dev/null
        CustomLog       /dev/null common
 
        <Directory /var/lib/monitorix/www>
                Options +ExecCGI +Indexes +FollowSymLinks +MultiViews
                AddHandler cgi-script cgi pl py
 
                # Utilisation de l'autentification Apache pour protéger Monitorix
                AuthType Digest
                AuthName "Access restricted"
                AuthDigestDomain http://monitorix.domaine.com/
                AuthDigestProvider file
                AuthUserFile /usr/share/monitorix/.htdigest
                Require valid-user
        </Directory>
</VirtualHost>

Avant de recharger Aapche, il faut générer le fichier .htdigest :

sudo htdigest -c /usr/share/monitorix/.htdigest "Access restricted" USER

Où USER est votre nom d’utilisateur…

Et normalement vous êtes bon pour charger le VHost et redémarrer Apache :

sudo a2ensite monitorix.domaine.com.conf
sudo service apache2 reload

À noter que le rechargement d’Apache requerra peut-être l’activation de certains modules comme auth_digest. Votre nouveau site est accessible à http://monitorix.domaine.com, et vous demandera normalement une authentification 🙂

Connexion à Monitorix

Configuration de base de Monitorix

La configuration de Monitorix s’effectue principalement via le fichier /etc/monitorix/monitoric.conf et /etc/monitorix/conf.d depuis la version 3.5. Ayant eu quelques souci avec /etc/monitorix.conf.d/ (les fichiers n’étaient pas chargés), j’ai directement modifié /etc/monitorix/monitoric.conf.

L’organisation est très simple : un premier bloc de configuration pour les paramètres globaux, puis un bloc par graphique. Voici une piste pour les paramètres globaux :

title = Statistiques de mon serveur personnel
hostname = HOST.domaine.com
theme_color = black
refresh_rate = 150
iface_mode = graph
enable_zoom = y
netstats_in_bps = n
disable_javascript_void = n
temperature_scale = c
show_gaps = n
global_zoom = 1
max_historic_years = 1
accept_selfsigned_certs = y
include_dir = /etc/monitorix/conf.d
 
base_dir = /var/lib/monitorix/www
base_lib = /var/lib/monitorix/
base_url = /
base_cgi = /cgi
 
<httpd_builtin>
        enabled = n
        host =
        port = 8080
        user = nobody
        group = nogroup
        log_file = /var/log/monitorix-httpd
        hosts_deny =
        hosts_allow =
        <auth>
                enabled = n
                msg = Monitorix: Restricted access
                htpasswd = /var/lib/monitorix/htpasswd
        </auth>
</httpd_builtin>

Ici le serveur web intégré est désactivé et j’ai adapté quelques directives pour que cela fonctionne avec Aapche. La suite de la configuration est très bien documentée sur le site officiel, n’hésitez pas à aller y faire un tour !

Comment interpréter les graphiques générés ?

Parmi tous les graphiques générés, certains avec des codes spéciaux pourront vous paraître étranges. Est-ce bon signe si ma courbe va vers le haut ? Si elle est plate ? Pourquoi y a-t-il plusieurs courbes ? Pourquoi mesure-t-on la charge avec des unités de temps ? Autant de questions auxquelles je vais essayer de répondre rapidement !

Premier graphique : la charge système (System load average and usage)

Ce premier graphique représente la charge globale que supporte votre serveur. Chez moi, à l’heure où j’écris ces lignes, le graphique ressemble à cela :

Charge du serveur le 27 mars 2014.

Charge du serveur le 27 mars 2014.

Comment interpréter ces valeurs ?

  • La valeur est inférieure à 1 : il n’y a pas assez de processus pour occuper complètement la machine. Grosso-modo il ne se passe rien et si un processus arrive il sera normalement traité rapidement.
  • La valeur est égale à 1 : cela signifie qu’à tout moment un processus occupait complètement la machine.Si de nouveaux processus demandent à être traités à cet instant, ils devront attendre.
  • La valeur est supérieure à 1 : votre machine est trop chargée et étouffe, il va falloir penser à faire quelque chose !

Si vous cherchez un peu plus de détails, Wikipédia est votre amie.

Dans mon graphique ci-dessus, on voit clairement que mon serveur a été très occupé à 2h du matin, ce qui correspond à l’exécution du script de sauvegarde. Attention cependant, on parle bien ici de la charge globale du serveur. Si par exemple l’interface réseau venait à être sollicitée à 100% pendant 15 min, j’aurais une belle courbe bloquée à 1 voire plus. Idem si par exemple j’avais une trop grande quantité d’accès disque…

Du coup si la courbe est trop élevée trop souvent, c’est mauvais signe…

Les statistiques Netstats

Ce graphique indique l’état de vos connexions TCP.

netstat1z.1day

Pour rappel les différents états d’une connexion TCP sont :

  • CLOSED : il n’y a pas de connexion.
  • LISTEN : le serveur « écoute », il est en attente de connexion.
  • SYN-SENT : un segment SYN a été envoyé, on attend donc une réponse du destinataire.
  • SYN-RECV : le segment SYN-ACK a été envoyé, on attend une réponse ACK de la part du destinataire.
  • ESTABLISHED : représente une connexion ouverte, prête à transférer des données.
  • FIN_WAIT1 : la demande de fin de connexion FIN a été envoyée, on attend la réponse.
  • FIN_WAIT2 : attente d’une demande de fin de connexion du TCP distant.

Wikipédia devrait, comme d’habitude, vous renseigner davantage 😉

Statistiques d’utilisation de MySQL

Le premier graphique est relativement simple puisqu’il affiche les requêtes envoyées à votre base de données MySQL.

mysql01z.1day

Le blog génère un certain nombre de SELECT comme vous pouvez le voir ci-dessus. Sur un graphique d’un mois, je devrais voir un pic de INSERT lors de la rédaction d’articles.

Le deuxième graphique nous donne un peu plus d’informations sur les performances de MySQL.

mysql02z.1day

Je ne vais pas réécrire la documentation, car sachez que d’excellentes explications y sont fournies.

Monitorix peut aussi vous alerter !

Car il dispose d’un certains nombre de sondes et qu’il est capable d’exécuter vos propres scripts en cas de problème, Monitorix peut vous alertez si votre serveur a trop chaud, ou si votre processeur est trop chargé trop longtemps. C’est un plus intéressant si vous souhaitez garder un œil si vos petits, même la nuit !

Les mises à jour sont assez fréquentes et de nouveaux graphiques sont proposés à chaque fois. Monitorix est vraiment un outil prometteur pour de la surveillance à petite échelle, ou simplement pour vous informer facilement de l’état de vos systèmes. Je vous le recommande !

D’ailleurs si jamais vous souhaitez voir à quoi cela ressemble, vous pouvez aller faire un tour sur la démonstration officielle !

Cet article vous a plu ? Partagez-le sur les réseaux sociaux !

Twitter Facebook Google Plus email