====== Munin - Installation d'un outil d'analyse des ressources ======
--- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2020/02/21 14:23//
''munin'' collecte et analyse les ressources utilisées par les serveurs qu'il surveille. Dans le cadre du MCO, l'outil permet à l'administrateur de connaître l'état précis des ressources d'un serveur et leurs évolutions dans le temps.
* Référence : [[http://munin-monitoring.org/|Munin]]
Cette procédure a été réalisée et testée sur une VM debian 10 (serveur et client) et une VM Windows 10 (client).Cette procédure nécessite des droits ''root''. Faîtes donc attention à ce que vous faîtes.
===== Prérequis =====
* ''munin'' nécessite un serveur ''apache2'' correctement configuré. Pour cela, on met à jour les dépôts ''APT'' :
apt-get update
* On installe les paquets nécessaires :
apt-get install -y apache2 libcgi-fast-perl libapache2-mod-fcgid libwww-perl
* On active les modules ''apache2'' :
a2enmod fcgid
===== Installation du serveur =====
* On commence par mettre le dépôt ''APT'' à jour :
apt-get update
* On installe les paquets nécessaires :
apt-get install -y munin
==== Configuration ====
* On édite le fichier de configuration de ''munin'' :
nano /etc/munin/munin.conf
* Au début du fichier :
* On décommente la ligne ''dbdir''.
* On décommente la ligne ''htmldir'' et on modifie sa valeur par ''/var/www/munin''.
* On décommente la ligne ''logdir''.
* On décommente la ligne ''rundir''.
* On décommente la ligne ''tmpldir''.
* Plus bas dans le document (on peut rechercher avec ''CTRL+W'' la section ''a simple host tree'') :
* On supprime la valeur entre ''[]'' et on la remplace par le ''FQDN'' du serveur ''munin''.
* On enregistre avec ''CTRL+O'' et on quitte avec ''CTRL+X''.
* On crée le dossier web de ''munin'' :
mkdir -p /var/www/munin
* On change le propriétaire du dossier créé :
chown munin:munin /var/www/munin
* On crée un lien symbolique du fichier de configuration ''/etc/munin/apache24.conf'' dans le dossier ''/etc/apache2/conf-available/'' :
cd /etc/apache2/conf-available/
ln -s /etc/munin/apache24.conf ./munin.conf
* On modifie la configuration :
nano /etc/apache2/conf-available/munin.conf
* La configuration doit ressembler à ça :
# Munin configuration for apache2
#
# Apache can serve munin's files that are either statically generated
# (in a cron job) or generated on demand (via cgi).
# The relevant munin settings are "html_strategy" and "graph_strategy".
# The related apache settings can be adjusted at the end of this file.
#
# See /usr/share/doc/munin/README.Debian for details.
# ***** COMMON SETTINGS FOR ALL STRATEGIES *****
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
Alias /munin/static/ /var/www/munin/static/
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
SetHandler fcgid-script
SetHandler cgi-script
# ***** SETTINGS FOR CGI/CRON STRATEGIES *****
# pick _one_ of the following lines depending on your "html_strategy"
# html_strategy: cron (default)
Alias /munin /var/www/munin
# html_strategy: cgi (requires the apache module "cgid" or "fcgid")
#ScriptAlias /munin /usr/lib/munin/cgi/munin-cgi-html
* On modifie le cron ''/etc/cron.d/munin'' pour remplacer ''/var/cache/munin/www'' par ''/var/www/munin''.
* On redémarre les services :
systemctl restart munin.service
systemctl restart munin-node.service
systemctl restart apache2.service
* En cas d'erreur de redémarrage du service Munin : [[linux_munin#failed_to_restart_muninserviceunit_muninservice_is_masked|Failed to restart munin.service: Unit munin.service is masked.]]
Félicitations, vous devriez désormais avoir accès à votre serveur ''munin'' via l'adresse http://ip_du_serveur_munin/munin.
==== Sécurisation ====
Dans le cas où ''munin'' devrait être accessible sur Internet et du fait des données sensibles qu'il présente, on peut rajouter une demande de mot de passe pour accéder au site. Pour cela :
* On modifie le fichier ''/etc/apache2/conf-available/munin.conf'' pour ajouter la directive ''AllowOverride all''. Le fichier ressemble du coup à ça :
# Munin configuration for apache2
#
# Apache can serve munin's files that are either statically generated
# (in a cron job) or generated on demand (via cgi).
# The relevant munin settings are "html_strategy" and "graph_strategy".
# The related apache settings can be adjusted at the end of this file.
#
# See /usr/share/doc/munin/README.Debian for details.
# ***** COMMON SETTINGS FOR ALL STRATEGIES *****
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
Alias /munin/static/ /var/www/munin/static/
AllowOverride all
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
SetHandler fcgid-script
SetHandler cgi-script
# ***** SETTINGS FOR CGI/CRON STRATEGIES *****
# pick _one_ of the following lines depending on your "html_strategy"
# html_strategy: cron (default)
Alias /munin /var/www/munin
# html_strategy: cgi (requires the apache module "cgid" or "fcgid")
#ScriptAlias /munin /usr/lib/munin/cgi/munin-cgi-html
* On créé le fichier ''/var/www/munin/.htaccess'' :
nano /var/www/munin/.htaccess
* On ajoute les directives suivantes :
AuthType Basic
AuthName "Members Only"
AuthUserFile /var/www/munin/htpasswd.users
require valid-user
* Après avoir enregistré le fichier, on lui donne les droits nécessaires :
chown www-data:www-data /var/www/munin/.htaccess
chmod 400 /var/www/munin/.htaccess
* Il nous reste plus qu'à crée le fichiers de mots de passe :
htpasswd -c /var/www/munin/htpasswd.users muninadmin
* On renseigne le mot de passe correspondant à l'utilisateur ''muninadmin''.
* On redémarre ''apache2'' :
service apache2 restartVoilà, l'accès à ''munin'' est désormais protégé par un mot de passe.
===== Installation d'un client sous Linux =====
* On commence par mettre à jour les dépôts ''APT'' :
apt-get update
* On installe les paquets nécessaires :
apt-get install -y munin-node munin-plugins-extra
* Par défaut, tous les plugins utilisables sont activés. Pour avoir la liste complète des plugins et la raison de leur inactivité (le cas échéant), on peut exécuter la commande suivante :
munin-node-configure --suggest
* Pour activer un plugin, il suffit de créer un lien symbolique entre son dépôt ''/usr/share/munin/plugins/'' et le dossier actif ''/etc/munin/plugins/''. Par exemple, pour le plugin ''acpi'' :
cd /etc/munin/plugins/
ln -s /usr/share/munin/plugins/acpi .Vous pouvez activer tous les modules conseillés avec la commande :
munin-node-configure --suggest --shell | sh
* Une fois les plugins souhaités activés, il faut autoriser le serveur à récupérer les informations. Pour cela, on édite le fichier ''/etc/munin/munin-node.conf'' :
nano /etc/munin/munin-node.conf
* On ajoute l'adresse de notre serveur maître sous la forme d'une expression régulière (''regex''). Par exemple, pour un serveur dont l'adresse IP est ''192.168.20.54'', la ligne à ajouter sera :
allow ^192\.168\.20\.54$
* Une fois la modification faîte et enregistrée, on redémarre le service :
service munin-node restart
* De retour sur le serveur, on va dans le dossier ''/etc/munin/munin-conf.d'' :
cd /etc/munin/munin-conf.d
* Ici, on peut créer des groupes pour catégoriser les postes clients, par exemple ; bdd, web, prod, etc...
* Donc, si il n'existe pas encore, on crée le fichier de groupe pour notre client, disons qu'il s'agit d'un serveur de base de données ''MySQL'', on créera donc le fichier ''bdd.conf'' :
touch bdd.conf
* On peut alors éditer le fichier de configuration correspondant au groupe choisi pour le client (ici, bdd.conf) :
nano bdd.conf
* On ajoute les informations du client. Par exemple pour la machine ''srv-mysql'', dans le groupe ''bdd'' et dont l'adresse IP est ''192.168.20.55'', on ajoutera :
[srv-mysql.bdd]
address 192.168.20.55
use_node_name yes
* Il ne nous reste plus qu'à relancer le service :
systemctl restart apache2.service''munin'' collecte les données toutes les 5 min par défaut. C'est le temps qu'il vous faudra attendre pour voir apparaître le nouveau client sur la page web.
===== Installation d'un client sous Windows =====
* On commence par installer le service SNMP :
Add-WindowsCapability -Online -Name "SNMP.Client~~~~0.0.1.0"
* Le service installé, on ouvre la fenêtre des services ''services.msc'' et on édite ''Service SNMP''.
Si les onglets ''Agent'', ''Interruptions'' et/ou ''Sécurité'' n'apparaissent pas, redémarrer le service, voire le client Windows.
* Dans l'onglet ''Agent'', on coche tous les services.
* Dans l'onglet ''Interruptions'', on ajoute ''public'' au nom de la communauté et on ajoute l'adresse du serveur Munin dans les destinations des interruptions.
* Dans l'onglet ''Sécurité'', on ajoute la communauté ''public'' en mode ''LECTURE CREATION'' et on active ''Accepter les paquets SNMP provenant de n'importe quel hôte''.
{{ :linux:munin:munin_001.png |}}{{ :linux:munin:munin_002.png |}}{{ :linux:munin:munin_003.png |}}
* On ferme la fenêtre en cliquant sur ''OK'' et on redémarre le service.
* On retourne sur le serveur Munin. Là, on installe les modules SNMP, si besoin :
apt update && apt install -y libnet-snmp-perl
* On vérifie les modules SNMP disponibles pour le client Windows (''windows.shyrka.sys'' dans l'exemple) :
Si votre réseau n'a pas de serveur DNS (Workgroup par exemple), n'hésitez pas à mettre le nom du client dans le fichier ''/etc/hosts''. munin-node-configure -snmp windows.shyrka.sys
* Ce qui renvoie dans la console :
Plugin | Used | Suggestions
------ | ---- | -----------
snmp__cpuload | no | yes (+windows.shyrka.sys)
snmp__df | no | yes (+windows.shyrka.sys)
snmp__df_ram | no | yes (+windows.shyrka.sys)
snmp__fc_if_ | no | no [[[ plugin has neither autoconf not suggest support ]]]
snmp__fc_if_err_ | no | no [[[ plugin has neither autoconf not suggest support ]]]
snmp__if_ | no | yes (+windows.shyrka.sys/22 +windows.shyrka.sys/25)
snmp__if_err_ | no | yes (+windows.shyrka.sys/22 +windows.shyrka.sys/25)
snmp__if_multi | no | yes (+windows.shyrka.sys)
snmp__load | no | no [[[ plugin has neither autoconf not suggest support ]]]
snmp__memory | no | yes (+windows.shyrka.sys)
snmp__netapp_diskusage_ | no | no [[[ plugin has neither autoconf not suggest support ]]]
snmp__netapp_inodeusage_ | no | no [[[ plugin has neither autoconf not suggest support ]]]
snmp__netstat | no | yes (+windows.shyrka.sys)
snmp__print_pages | no | no [[[ plugin has neither autoconf not suggest support ]]]
snmp__print_supplies | no | no [[[ plugin has neither autoconf not suggest support ]]]
snmp__processes | no | yes (+windows.shyrka.sys)
snmp__rdp_users | no | yes (+windows.shyrka.sys)
snmp__sensors_fsc_bx_fan | no | no [[[ plugin has neither autoconf not suggest support ]]]
snmp__sensors_fsc_bx_temp | no | no [[[ plugin has neither autoconf not suggest support ]]]
snmp__sensors_fsc_fan | no | no [[[ plugin has neither autoconf not suggest support ]]]
snmp__sensors_fsc_temp | no | no [[[ plugin has neither autoconf not suggest support ]]]
snmp__sensors_mbm_fan | no | no [[[ plugin has neither autoconf not suggest support ]]]
snmp__sensors_mbm_temp | no | no [[[ plugin has neither autoconf not suggest support ]]]
snmp__sensors_mbm_volt | no | no [[[ plugin has neither autoconf not suggest support ]]]
snmp__swap | no | yes (+windows.shyrka.sys)
snmp__uptime | no | yes (+windows.shyrka.sys)
snmp__users | no | yes (+windows.shyrka.sys)
snmp__winload | no | yes (+windows.shyrka.sys)
snmp__winmem | no | yes (+windows.shyrka.sys)
* Dans la colonne ''Suggestions'', les modules pour lequels des données sont disponibles apparaissent avec la mention ''yes''. Pour activer un module, il suffit de créer un lien du module choisi en y ajouter le nom (pour ceux qui porte la mention ''+windows.shyrka.sys'') et l'indice (pour ceux qui portent la mention ''+windows.shyrka.sys/xx''). Par exemple, pour ''snmp_cpuload'' :
ln -s /usr/share/munin/plugins/snmp__cpuload /etc/munin/plugins/snmp_windows.shyrka.sys_cpuload
* Et pour ''snmp_if_ '' :
ln -s /usr/share/munin/plugins/snmp__if_ /etc/munin/plugins/snmp_windows.shyrka.sys_if_22
ln -s /usr/share/munin/plugins/snmp__if_ /etc/munin/plugins/snmp_windows.shyrka.sys_if_25
* Une fois les modules activés, on ajoute la machine dans un groupe de Munin (groupes crées de la même manière que pour les clients Linux). Les informations à ajouter au groupe sont le nom d'hôte tel qu'ajouté dans les lien snmp, l'adresse 127.0.0.1 (c'est le serveur qui fait la requête SNMP) et non pour l'utilisation du nom de node (Munin utilisera le nom indiqué dans le paramétrages machine, ici ''windwos.shyrka.sys'' et non celui de la machine portant le node, à savoir le serveur Munin). Ce qui donne :
[windows.shyrka.sys]
address 127.0.0.1
use_node_name no
* Il ne reste plus qu'à redémarrer les services ''munin-node'' et ''apache2'' :
service munin-node restart
service apache2 restart
===== Erreurs et Corrections =====
==== Failed to restart munin.service: Unit munin.service is masked. ====
* Vérifier si le fichier de service pointe sur ''/dev/null'' :
ls -l /lib/systemd/system/munin.service
# Retour
lrwxrwxrwx 1 root root 9 mars 3 2017 munin.service -> /dev/null
* Dans ce cas, supprimez le fichier :
rm -f /lib/systemd/system/munin.service
* Relancez le //daemon// :
systemctl daemon-reload
* Vérifier le service :
systemctl status munin.service
# Retour correct :
● munin.service - LSB: Create /var/run/munin on boot
Loaded: loaded (/etc/init.d/munin; generated; vendor preset: enabled)
Active: inactive (dead)
Docs: man:systemd-sysv-generator(8)
* Si le retour est correct, relancer le service :
systemctl start munin.service
systemctl status munin.service
# Retour
● munin.service - LSB: Create /var/run/munin on boot
Loaded: loaded (/etc/init.d/munin; generated; vendor preset: enabled)
Active: active (exited) since Mon 2020-04-06 10:29:03 CEST; 6s ago
Docs: man:systemd-sysv-generator(8)
Process: 6678 ExecStart=/etc/init.d/munin start (code=exited, status=0/SUCCESS)
avril 06 10:29:03 mlb-monitor-2 systemd[1]: Starting LSB: Create /var/run/munin on boot...
avril 06 10:29:03 mlb-monitor-2 systemd[1]: Started LSB: Create /var/run/munin on boot.
~~DISCUSSION~~