Laboratoire infra Linux HA #6 – Surveillance avec Munin

Laboratoire infra Linux HA #6 – Surveillance avec Munin

lab07-munin-01

Cet article est le sixième opus de la suite d’articles sur la mise en œuvre d’une infrastructure Linux visant à servir le blog « lab07.lab » en haute dispo.

Dans le prĂ©cĂ©dent article, nous avons de nouveau mis en Ĺ“uvre de la haute-disponibilitĂ© pour nos serveurs FRONT et pour ainsi dire terminĂ© de redondĂ© notre infrastructure. « Oui heuuuu la base de donnĂ©es heuuuu c’est pas de la haute dispoheuuu… ». T’as raison et, c’est un secret mais… on y reviendra !

Les deux prĂ©cĂ©dents articles ont Ă©tĂ© un peu costauds alors aujourd’hui on va se dĂ©tendre en regardant des graphiques relater le calme plat de notre infrastructure. On va faire causer Munin et ses Munin-Node ensemble pour Ă©changer des mĂ©triques des systèmes et services de nos serveurs.
Note que je ne sais pas où caser : Munin délèguera la création des graphs à rrdtool.

Le serveur Munin

En vrai crack t’as mĂŞme pas attendu de lire ce paragraphe que tu as dĂ©jĂ  ta machine lab07-munin-01 Ă  jour, sans nano, avec la bonne IP et le bon hostname. Tu gères !
Je dĂ©conne, t’as oubliĂ© /etc/hosts.

Munin s’appuie sur un serveur web pour publier ses pages de graphiques et comme on ne change pas une Ă©quipe qui fait match nul, on va conserver Apache. Comment ça, tu insinue que je suis une quiche avec Nginx ? Possible. Avec Apache aussi ? T’es dĂ©sagrĂ©able !

ShellSession
root@lab07-munin-01:~# apt install apache2 libcgi-fast-perl libapache2-mod-fcgid
root@lab07-munin-01:~# 
[...]
root@lab07-munin-01:~# apt install munin

Munin vient avec une tĂ©trachiĂ©e de dĂ©pendances, fais toi un cafĂ©, tonds ta pelouse, fais toi le maillot, lis un man ou une RFC… je sais pas mais sois pas trop pressĂ© de reprendre.

Quand c’est installĂ© on va modifier la configuration de Munin pour que notre serveur soit reprĂ©sentĂ© par son nom plutĂ´t que par localhost.localdomain. On ne touchera pas aux autres paramètres parce que le dĂ©faut, bien que commentĂ©, suffis.

ShellSession
root@lab07-munin-01:~# sed -i 's/localhost.localdomain/lab07-munin-01/g' /etc/munin/munin.conf

Par dĂ©faut, la configuration Apache de Munin prĂ©sente la directive Require local au vhost. On va crĂ©er un fichier d’authentification Apache (je me suis grave cassĂ© zouk Ă  inventer un mot passe… sauras-tu le deviner ?) et le renseigner afin de pouvoir accĂ©der sans non plus laisser la porte grande ouverte. On redĂ©marrera alors Apache pour appliquer les changements.

ShellSession
root@lab07-munin-01:~# mkdir /etc/apache2/htpasswd
root@lab07-munin-01:~# htpasswd -c /etc/apache2/htpasswd/munin munin
New password: 
Re-type new password: 
Adding password for user munin
root@lab07-munin-01:~# vi /etc/munin/apache24.conf
/etc/munin/apache24.conf
[...]
<Directory /var/cache/munin/www>
    # Require local
    AuthUserFile /etc/apache2/htpasswd/munin
    AuthName "munin"
    AuthType Basic
    Require valid-user
    Options None
</Directory>

<Directory /usr/lib/munin/cgi>
    # Require local
    AuthUserFile /etc/apache2/htpasswd/munin
    AuthName "munin"
    AuthType Basic
    Require valid-user
    <IfModule mod_fcgid.c>
        SetHandler fcgid-script
    </IfModule>
    <IfModule !mod_fcgid.c>
        SetHandler cgi-script
    </IfModule>
</Directory>
[...]
ShellSession
root@lab07-munin-01:~# systemctl restart apache2

Si on se rend sur http://munin:munin@lab07-munin-01/munin/, ça commence à grapher !

Munin-node, le client et les sondes

Quand c’est ta première fois (toutoute) tu commences Ă  regarder le dossier des sondes, tu vois qu’il faut faire un lien symbolique de la sonde depuis leur dossier de stockage /usr/share/munin/plugins/ vers leur dossier d’exploitation /etc/munin/plugins mais que ça ne semble pas si simple. Mais le client munin-node est plutĂ´t sympa, il peut nous conseiller quelle sonde utiliser et mĂŞme, faire une bonne partie du travail pour nous.

ShellSession
root@lab07-munin-01:~# munin-node-configure --suggest
Plugin                     | Used | Suggestions                            
------                     | ---- | -----------                            
acpi                       | no   | no [[[ plugin has errors, see below ]]]
amavis                     | no   | no [command logtail or file /var/log/mail.info not found]
apache_accesses            | no   | no [LWP::UserAgent not found]          
apache_processes           | no   | no [LWP::UserAgent not found]          
apache_volume              | no   | no [LWP::UserAgent not found]          
apc_envunit_               | no   | no [no units to monitor]               
bonding_err_               | no   | no [No /proc/net/bonding]              
courier_mta_mailqueue      | no   | no [spooldir not found]
[...]

Bon il est gentil mais pourquoi il me suggère pas d’utiliser le plugin Apache ? Bah il nous le dit pourquoi : no [LWP::UserAgent not found]. Il manque un librairie Perl.

ShellSession
root@lab07-munin-01:~# apt-get install libwww-perl
[...]
root@lab07-munin-01:~# munin-node-configure --suggest
Plugin                     | Used | Suggestions                            
------                     | ---- | -----------                            
acpi                       | no   | no [[[ plugin has errors, see below ]]]
amavis                     | no   | no [command logtail or file /var/log/mail.info not found]
apache_accesses            | no   | yes                                    
apache_processes           | no   | yes                                    
apache_volume              | no   | yes                                    
apc_envunit_               | no   | no [no units to monitor]               
bonding_err_               | no   | no [No /proc/net/bonding]
courier_mta_mailqueue      | no   | no [spooldir not found]
[...]

Bon il a déjà fait une partie du boulot mais il peut aller plus loin.

ShellSession
root@lab07-munin-01:~# munin-node-configure --suggest --shell
ln -s '/usr/share/munin/plugins/apache_accesses' '/etc/munin/plugins/apache_accesses'
ln -s '/usr/share/munin/plugins/apache_processes' '/etc/munin/plugins/apache_processes'
ln -s '/usr/share/munin/plugins/apache_volume' '/etc/munin/plugins/apache_volume'
# The following plugins caused errors:
# OSEF des erreurs ci-dessous, par contre on n'oublira pas de redémarrer munin-node après
[...]
root@lab07-munin-01:~# ln -s '/usr/share/munin/pl # ...
root@lab07-munin-01:~# systemctl restart munin-node

On aurait pu directement pipe le rĂ©sultat vers sh mais un peu comme faire un -y sur une installation, c’est pas trop recommandĂ© parce qu’on n’a pas le temps de contrĂ´ler ce qui va ĂŞtre fait.
Faudra patienter un peu le temps que ça graphe pour le plugin qu’on vient d’ajouter mais rapidement Apache apparaĂ®t.

Munin-node sur les autres serveurs du lab

On va installer Munin-node sur tous nos serveurs et autoriser notre serveur Munin Ă  les requĂŞter. On regardera ensuite pour ajouter les plugins qui vont bien.

ShellSession
root@lab07-munin-01:~# _LABSERVERS="lab07-db-01 lab07-db-02 lab07-front-01 lab07-front-02 lab07-lb-01 lab07-lb-02 lab07-munin-01 lab07-nfs-01 lab07-nfs-02"
root@lab07-munin-01:~# for _LABSERVER in $_LABSERVERS; do ssh $_LABSERVER 'apt install munin-node && sed -i "s/allow ^127\\\.0\\\.0\\\.1\\$/allow 192.168.50.29/g" /etc/munin/munin-node.conf && systemctl restart munin-node'; done
root@lab07-db-01's password: 
root@lab07-db-02's password: 
root@lab07-front-01's password: 
root@lab07-front-02's password: 
root@lab07-lb-01's password: 
root@lab07-lb-02's password: 
root@lab07-nfs-01's password: 
root@lab07-nfs-02's password: 
root@lab07-munin-01:~#

Au cas oĂą t’aies pas compris, pour chacun des serveurs du lab, je fais une connexion ssh depuis lab07-munin-01 pour installer munin-node, puis modifier la ligne allow ^127.0.0.1$ pour la remplacer par l’IP de notre serveur Munin et enfin redĂ©marrer le produit. Non je ne suis pas un goret et oui, j’aurai pu paramĂ©trer SSH pour prendre en compte ma clĂ© privĂ©e. OuĂ© le triplement de l’antislash c’Ă©tait chiant Ă  trouver…

Ensuite, serveur par serveur on va lancer munin-node-configure --suggest, vérifier les paquets/librairies qui manque, les installer, activer les plugins munin-node et le redémarrer.

Sur les serveurs DB

ShellSession
root@lab07-db-01:~# munin-node-configure --suggest
[...]
mysql_                     | no   | no [Missing dependency DBI]
[...]

# On installe le paquet adapté

root@lab07-db-01:~# apt install libclass-dbi-mysql-perl
root@lab07-db-01:~# munin-node-configure --suggest --shell
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_bin_relay_log'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_binlog_groupcommit'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_commands'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_connections'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_files_tables'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_bpool'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_bpool_act'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_insert_buf'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_io'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_io_pend'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_log'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_rows'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_semaphores'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_tnx'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_myisam_indexes'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_network_traffic'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_qcache'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_qcache_mem'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_replication'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_select_types'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_slow'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_sorts'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_table_locks'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_tmp_tables'
[...]
root@lab07-db-01:~# ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_bin_relay_log'
[...]
root@lab07-db-01:~# systemctl restart munin-node

J’ai créé les liens symboliques et j’ai appliquĂ© de mĂŞme sur lab07-db-02.

Sur les serveurs FRONT

ShellSession
root@lab07-front-01:~# munin-node-configure --suggest
Plugin                     | Used | Suggestions                            
------                     | ---- | -----------                            
[...]
apache_accesses            | no   | no [LWP::UserAgent not found]          
[...]

# On installe le paquet adapté

root@lab07-front-01:~# apt-get install libwww-perl
root@lab07-front-01:~# munin-node-configure --suggest --shell
ln -s '/usr/share/munin/plugins/apache_accesses' '/etc/munin/plugins/apache_accesses'
ln -s '/usr/share/munin/plugins/apache_processes' '/etc/munin/plugins/apache_processes'
ln -s '/usr/share/munin/plugins/apache_volume' '/etc/munin/plugins/apache_volume'
[...]
root@lab07-front-01:~# ln -s '/usr/share/munin/plugins/apache_accesses' '/etc/munin/plugins/apache_accesses'
[...]
root@lab07-front-01:~# systemctl restart munin-node

Je fais de même sur lab07-front-02. Le plugins NFS client est déjà activé.

Sur les serveurs LB

ShellSession
root@lab07-lb-01:~# munin-node-configure --suggest
[...]
# Ah merde, là il suggère pas :-(
# Bah on va pas se laisser faire.
root@lab07-lb-01:~# ln -s '/usr/share/munin/plugins/haproxy_' '/etc/munin/plugins/haproxy_fronted'
root@lab07-lb-01:~# ln -s '/usr/share/munin/plugins/haproxy_' '/etc/munin/plugins/haproxy_backend'
root@lab07-lb-01:~# apt-get install libwww-perl
root@lab07-lb-01:~# systemctl restart munin-node

Sur les LB il faut la même librairie Perl que sur les FRONT phénoménal non ? Tu devrais savoir quoi faire.

Sur les serveurs NFS

Les plugins Munin-node NFS Serveur sont déjà activés.

Ajout des nodes au serveur

Tous les serveurs du lab sont autorisĂ©s Ă  rĂ©pondre au serveur et ont leurs plugins d’activĂ©s. On est prĂŞt Ă  les ajouter au serveur pour qu’il rĂ©colte les informations. On va adapter ce qu’on avait configurĂ© pour notre serveur Munin afin d’embellir le tout.

ShellSession
root@lab07-munin-01:~# vi /etc/munin/munin.conf
/etc/munin/munin.conf
[...]
# a simple host tree
# [lab07-munin-01]
#    address 127.0.0.1
#    use_node_name yes
# on ajoute

[LB;lab07-lb-01]
    address 192.168.50.21
    use_node_name no

[LB;lab07-lb-02]
    address 192.168.50.22
    use_node_name no

[FRONT;lab07-front-01]
    address 192.168.50.23
    use_node_name no

[FRONT;lab07-front-02]
    address 192.168.50.24
    use_node_name no

[DB;lab07-db-01]
    address 192.168.50.25
    use_node_name no

[DB;lab07-db-02]
    address 192.168.50.26
    use_node_name no

[NFS;lab07-nfs-01]
    address 192.168.50.27
    use_node_name no

[NFS;lab07-nfs-02]
    address 192.168.50.28
    use_node_name no

[MUNIN;lab07-munin-01]
    address 192.168.50.29
    use_node_name no

On a créé un joli groupe par Ă©tage (LB, FRONT, DB, NFS et MUNIN) dans lequel chacun de nos nodes sera appelĂ© par son petit nom plutĂ´t que celui du groupe et on requĂŞte chacun de ces nodes sur son port 4949. J’avais fait un groupe global lab07 de prime abord mais c’est vachement moins lisible en fait.

Si comme moi tu cherches Ă  remettre Ă  zĂ©ro les graphes pour trouver la meilleure prĂ©sentation, c’est pas compliquĂ© quand on sait oĂą supprimer.

ShellSession
root@lab07-munin-01:~# rm -rf /var/cache/munin/www/*
root@lab07-munin-01:~# systemctl restart munin-node munin

OuĂ© redĂ©marrer le node c’Ă©tait pas forcĂ©ment nĂ©cessaire… y’en a un peu de trop, je vous l’met quand-mĂŞme ?
Note que retrouver comment formuler ton fichier de conf Munin j’ai pas trouvĂ© ça super bien documentĂ© sur le net ni dans le fichier de base (qui prĂ©sente pourtant quelques Ă©lĂ©ments de configuration) mais pour quelqu’un qui a pas ouvert le man du soft je m’en sorts pas trop mal.

La fritte sur l’McDo

Renvoyer direct ton munin-node-configure –suggest –shell.

ShellSession
root@lab07-munin-01:~# munin-node-configure --suggest --shell | sh

RequĂŞter une sonde Ă  la main.

ShellSession
# "Nianiania, moi j'utilise netcat et pas telnet... balek"

root@lab07-munin-01:~# telnet 192.168.50.21 4949
Trying 192.168.50.21...
Connected to 192.168.50.21.
Escape character is '^]'.
# munin node at lab07-lb-01
list
cpu df df_inode entropy forks fw_conntrack fw_forwarded_local fw_packets haproxy_backend haproxy_fronted if_enp0s3 if_err_enp0s3 interrupts irqstats load memory open_files open_inodes proc_pri processes swap threads uptime users vmstat
fetch cpu
user.value 2508
nice.value 6
system.value 1846
idle.value 1570140
iowait.value 1012
irq.value 0
softirq.value 4826
steal.value 0
guest.value 0
.

Obtenir de la doc sur un plugin (trouvĂ© après la rĂ©daction de l’article).

ShellSession
root@lab07-munin-01:~# munindoc mysql_
NAME
    mysql_ - Munin plugin to display misc MySQL server status

APPLICABLE SYSTEMS
    Any MySQL platform, tested by the authors on: * MySQL 5.0.51 * MariaDB
    5.5.39 * MariaDB-5.5.39(galera). * MySQL 5.6.12 * MariaDB 10.0.18

    Plugins: * MariaDB-10 Query Response Time:
    https://mariadb.com/kb/en/mariadb/query_response_time-plugin/

    Information Schema tables: * User statistics - MariaDB-5.2+, OurDelta,
    Percona Server - https://mariadb.com/kb/en/mariadb/user-statistics

CONFIGURATION
    This script is used to generate data for several graphs. To generate
    data for one specific graph, you need to create a symbolic link with a
    name like mysql_<GRAPH> to this script.
[...]

Quelques lectures en vrac sur le sujet :

Le prochain article, on va faire un peu de troubleshoot sur l’infrastructure…

fin de la cassette

Fin de la bande

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *