Munin : monitorer des serveurs Linux (load, disques, réseau, systèmes, …)

Bloqueur de pub détectée - Vous bloquez l'affichage des publicités.
Pour soutenir le site, merci de bien vouloir laisser les publicités s'afficher.

Plus d'informations : Comment désactiver les bloqueurs de publicité sur un site internet.

Munin est un outil de surveillance des ressources en réseau qui peut aider à analyser les tendances des ressources.
Il se base sur RRDtool afin de générer des graphiques pour suivre les activités du serveur.
Avec Munin vous pouvez suivre très facilement l'activité réseau, disque, système mais aussi des mails, serveur WEB, etc.

Dans cet article, nous allons voir comment mettre en place une solution munin pour surveiller et monitorer plusieurs serveurs.

Munin : monitorer ses serveurs (load, disques, réseau, systèmes, ...)

Munin : comment ça marche

Si vous n'avez jamais entendu parlé des outils de surveillance basés sur RRDtool.
Globalement, les outils interrogent via des scripts ou requêtes SNMP des compteurs.
Ils se chargent ensuite de grapher celle-ci avec des moyens, des valeurs maximales, minimales, etc.

Munin fonctionne en tant que client et serveur.
On définit donc un serveur Munin qui va ensuite interroger les clients Munin.
Sur ces derniers, on installe un agent Munin.

Les données sont rassemblées sur le serveur qui établit les graphiques.
On peut aussi configurer des alertes par mail.
En effet lorsqu'un seuil est dépassé, vous pouvez en être alerté.

Enfin Munin est flexible car il fonctionne avec des plugins.
Par défaut, il en propose beaucoup mais on peut très facilement en installer de nouveaux pour étendre les surveillances.

Présentation du site munin avec les graphiques par ressources

La consultation se fait sur un site WEB.
Ci-dessous quatre machines sont surveillées.
A gauche, on a les thématique : réseau, disque, mail (postifx ou exim), nginx, uptime, sensors, etc.
On voit que disk est en jaune car un seuil est dépassé.

L'activité disque avec la place disque.
A chaque fois, vous avez les valeurs courantes, moyennes avec leurs minimales et maximales.
On a la même chose pour tous les composants (CPU, load, etc).
Par exemple sur un serveur, la mise en place avait permis de détecter la présence d'un Trojan BitCoin qui utilisait la CPU par intermitence.
J'en parle dans cet article : Backdoor.Linux.Bew.a et Client BitCoin

Les connexions établies à travers netstat.

Les graphiques du trafic de l'interface réseau avec l'upload et le download.

Mais aussi les types de connexions.
On peut aussi faire des graphiques iptables.

Ci-dessous on surveille pihole avec le nombre de clients connectés, le nombre de requêtes effectuées.

Enfin PHP-FPM, asseez utile pour vérifier que la configuration ne sature pas et pour l'optimiser : Comment Optimiser PHP-FPM

Autre exemple munin qui monitore Varnish et une attaque DoS, on voit bien le pic.

Enfin pour chaque type de ressources, munin vous donne les graphiques par jour, mois ou année.

Installer Munin pour surveiller et monitorer ses serveurs

Installer et configurer le serveur Munin (node)

On commence par installer le paquet avec apt-get :

apt-get install munin-node

puis on édite le fichier de configuration /etc/munin/munin.conf.
Dans cet exemple [localhost.malekal.com] est la déclaration du noeud.
On laisse donc comme adresse 127.0.0.1.

Puis on déclare les autres clients de la même manière avec leur adresse IP.

includedir /etc/munin/munin-conf.d

[localhost.malekal.com]
address 127.0.0.1
use_node_name yes

[sql.malekal.com]
address mysql_ovh
use_node_name yes

[pihole.malekal.com]
address 54.xxx
use_node_name yes

contact.someuser.command mail -s "Munin notification" [email protected]
html_strategy cgi
graph_strategy cgi

Puis on créé le lien symbolique qui va bien pour le CGI :

ln -s /usr/lib/munin/cgi /var/cache/munin/www/munin-cgi

Enfin relancez le service et daemon munin-node :

systemctl restart munin-node
Bravo ! Vous avez réussi à installer le serveur munin (munin-node).

Configuration du serveur WEB

Nginx

Tout d'abord, on installe fastcfgi :

apt-get install spawn-fcgi

Puis on donne les permissions adequates comme ceci :

spawn-fcgi -s /var/run/munin/fcgi-graph.sock -U www-data -u www-data -g www-data /usr/lib/munin/cgi/munin-cgi-graph
spawn-fcgi -s /var/run/munin/fcgi-html.sock -U www-data -u www-data -g munin  /usr/lib/munin/cgi/munin-cgi-html

Enfin voici un exemple de déclaration de site munin avec nginx.

server {

  listen 443;
        server_name munin.exemple.com;

        access_log /var/log/nginx/acces_munin.log main;
        error_log /var/log/nginx/error_munin.log;

        server_name_in_redirect off;
        root /var/cache/munin/www/;

        location /munin/ {
                fastcgi_split_path_info ^(/munin)(.*);
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_pass unix:/run/munin/fcgi-html.sock;
                include fastcgi_params;
        }

        location /munin/static/ {
                alias /etc/munin/static/;
                expires modified +1w;
        }

        location ^~ /munin-cgi/munin-cgi-graph/ {
                access_log off;
                fastcgi_split_path_info ^(//munin-cgi/munin-cgi-graph)(.*);
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_pass unix:/var/run/munin/fcgi-graph.sock;
                include fastcgi_params;
        }

        location ~ ^/(status|ping)$ {
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_index index.php;
                include fastcgi_params;
                #fastcgi_pass 127.0.0.1:9000;
                fastcgi_pass   unix:/run/php/php7.3-fpm.sock;
        }
}

Relancez le daemon nginx, une fois les modifications effectuées.

Apache2

On installe le module fastcgi que l'on active ensuite avec rewrite :

apt-get install libapache2-mod-fcgid
a2enmod rewrite
a2enmod fcgid

Enfin voici un exemple de VirtualHost Apache :

<VirtualHost *:80>
    ServerName munin.exemple.com
    ServerAlias munin
    Alias /static /var/cache/munin/www/static
    Alias /munin /var/cache/munin/www

      #apache debian
     <Directory "/var/cache/munin/www/static/">
        Options None
        Order allow,deny
        Allow from all
     </Directory>


    <IfModule !mod_rewrite.c>
        # required because we serve out of the cgi directory and URLs are relative
        Alias /munin-cgi/munin-cgi-html/static /var/cache/munin/www/static
        RedirectMatch ^/$ /munin-cgi/munin-cgi-html/
    </IfModule>

    <IfModule mod_rewrite.c>
        # Rewrite rules to serve traffic from the root instead of /munin-cgi
        RewriteEngine On

        # Static files
        RewriteRule ^/favicon.ico /var/cache/munin/www/static/favicon.ico [L]
        RewriteRule ^/static/(.*) /var/cache/munin/www/static/$1          [L]

        # HTML
        RewriteRule ^(/.*\.html)?$           /munin-cgi/munin-cgi-html/$1 [PT]

        # Images
        RewriteRule ^/munin-cgi/munin-cgi-graph/(.*) /$1
        RewriteCond %{REQUEST_URI}                 !^/static
        RewriteRule ^/(.*.png)$  /munin-cgi/munin-cgi-graph/$1 [L,PT]
    </IfModule>

    # 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
       # Replace above with "Require all granted" if running apache 2.4
    </Location>

    ScriptAlias /munin-cgi/munin-cgi-html /usr/lib/munin/cgi/munin-cgi-html
    <Location /munin-cgi/munin-cgi-html>
        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
       # Replace above with "Require all granted" if running apache 2.4
    </Location>

    <IfModule !mod_rewrite.c>
        <Location /munin-cgi/munin-cgi-html/static>
                # this needs to be at the end to override the above sethandler directives
                Options -ExecCGI
                SetHandler None
        </Location>
    </IfModule>
</VirtualHost>

Relancez Apache2, une fois l'ajout du VirtualHost.

Installer les agents et clients Munin

Ensuite pour installer un client munin :

apt-get install munin

Puis on édite le fichier de configuration /etc/munin/munin.conf
On déclare ensuite le host_name exactement comme sur le serveur munin.
Et surtout avec l'option allow on indique l'IP du serveur avec la syntaxe qui va bien.

log_level 4
log_file /var/log/munin/munin-node.log
pid_file /var/run/munin/munin-node.pid

background 1
setsid 1

user root
group root

ignore_file [\#~]$
ignore_file DEADJOE$
ignore_file \.bak$
ignore_file %$
ignore_file \.dpkg-(tmp|new|old|dist)$
ignore_file \.rpm(save|new)$
ignore_file \.pod$

host_name pihole.malekal.com

allow ^51\.xx\.xx\.xx$

Respectez bien la syntaxe allow sinon cela ne va pas fonctionner.
Par exemple, si le serveur a comme IP 192.168.0.254, alors mettre comme ceci :

allow ^192\.168\.0\.254$

Enfin relancez le service et daemon :

systemctl restart munin

A partir de là, le serveur munin-node va pouvoir interroger les agents.

Bravo ! l'agent munin est maintenant installé.

Installer des plugins sur munin

munin fonctionne avec des plugins (en perl, bash, python, ... ce que vous voulez).
Beaucoup sont fournis par défaut mais on peut en télécharger pour en ajouter.

Deux dossiers :

  • /etc/munin/plugins/ : la configuration des plugins actifs
  • /usr/share/munin/plugins/ : la base de données plugins

Pour en activer un, il suffit de faire un lien symbolique du dossier /etc vers celui de /usr.
Par exemple pour activer le plugin openvpn qui se trouve dans /usr/share/munin/plugins/openvpn, on utilise la commande suivante :

ln -s /usr/share/munin/plugins/openvpn /etc/munin/plugins/openvpn

uis pour tester le plugin :

munin-run openvpn

Parfois, certains plugins munin nécessitent des configurations particulières.
Par exemple pour surveiller Apache2 et Nginx, il faut autoriser le server-statut :

Par exemple comme ceci pour créer /nginx_status.
Et si vous utilisez php-fpm, on peut aussi créer un dossier /status ou /ping.

server {
#### STATUS...
        server_name localhost;
        server_name 127.0.0.1;
        access_log off;

        location /nginx_status {
                stub_status on;
                allow 127.0.0.1;
                deny all;
        }

        location ~ ^/(status|ping)$ {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
            fastcgi_pass   unix:/run/php/php7.3-fpm.sock;
             allow 127.0.0.1;
             deny all;
        }
}

Le script se charge alors d'interroger les URLs pour récupérer les compteurs qui vont bien.

Vous avez trouvé cet article utile et interressant, n'hésitez pas à le partager...

Trouver la solution sur le forum d'aide

Vous êtes arrivé au terme de l'article Munin : monitorer des serveurs Linux (load, disques, réseau, systèmes, …) mais vous n'avez pas trouvé la solution à votre problème...
Suivez ces articles du forum pour trouver une réponse ou demandez à votre tour de l'aide sur le forum