====== Munin ======
* [[https://doc.ubuntu-fr.org/munin]]
* [[https://angristan.fr/monitorer-serveur-linux-munin/]]
* [[https://www.noobunbox.net/serveur/monitoring/generation-dynamique-de-graphiques-sous-munin]]
* [[https://www.geek17.com/fr/content/debian-8-jessie-monitorer-nginx-et-mysql-grace-a-munin-37]]
Fonctionnement: un serveur va se connecter à des nœuds pour récupérer les données toutes les 5 min.
-----------
==== Installation d'un nœud ====
apt install munin-node munin-plugins-extra
Il est possible de visualiser l'état des plugins (données collectées):
munin-node-configure
En rajoutant ''%%--%%suggest'', il est possible de savoir quels plugins il est pertinent d'activer et lesquels posent problème.
L'activation d'un plugin se fait en faisant un lien symbolique de ''/usr/share/munin/plugins/'' vers ''/etc/munin/plugins/''.
Pour les plugins qui proposent plusieurs infos (signalés par un plus dans la liste), il faut créer le lien symbolique en ajoutant un underscore et le nom du sous-plugin.
Après chaque modification, il faut redémarrer le service ''munin-node''.
=== Plugins ===
== Nginx ==
Pour Nginx, il faut installer le paquet ''libwww-perl'' et ajouter dans la partie ''server'' du fichier ''/etc/nginx/conf.d/default.conf'':
location /nginx_status {
stub_status on; # return basic status information
access_log off;
allow 127.0.0.1; # restrict access to local only
deny all;
}
== MySQL ==
Pour MySQL, il faut installer le paquet ''libcache-cache-perl''.
== PiHole ==
Plugin pour monitorer PiHole: [[https://github.com/Rauks/MuninPiholePlugins]] mais préférer le fork [[https://github.com/RenWal/MuninPiholePlugins]] qui contient un graphe en plus.
Il faut créer un token depuis l'interface d'administration de PiHole et l'utiliser :
* ''/admin/api.php?summary&auth=$envtoken'', il faut ensuite supprimer le séparateur des milliers : stats=$(echo $apicall | sed 's/[{}"]//g' | sed -E "s/([0-9]),([0-9])/\1\2/g" | tr "," "\n")
* ''/admin/api.php?getQueryTypes&auth=$envtoken''
== Débit Internet ==
Pour monitorer le débit de la connexion Internet, utiliser l'outil de Ookla : https://www.speedtest.net/apps/cli. Il est ensuite possible de stocker le résultat de la commande suivante dans un fichier :
speedtest --accept-license --accept-gdpr --format=json-pretty
et ensuite utiliser les deux plugins suivants :
#!/bin/bash
case $1 in
config)
echo "graph_category network"
echo "graph_title Latency"
echo "graph_args -l 0"
echo "graph_vlabel ms"
echo "graph_scale no"
echo "latency.label Latency"
echo "latency.type GAUGE"
echo "latency.draw LINE1"
echo "graph_info Graph of Internet Connection Latency"
exit 0;;
esac
OUTPUT=$(jq .ping.latency speedtest.out)
echo "latency.value $OUTPUT"
#!/bin/bash
case $1 in
config)
echo "graph_category network"
echo "graph_title Speedtest"
echo "graph_args --base 1000 -l 0"
echo "graph_vlabel DL / UL"
echo "graph_scale no"
echo "down.label DL"
echo "down.type GAUGE"
echo "down.draw LINE1"
echo "up.label UL"
echo "up.type GAUGE"
echo "up.draw LINE1"
echo "graph_info Graph of Internet Connection Speed"
exit 0;;
esac
DOWNLOAD=$(jq ".download.bandwidth*8/1e6" speedtest.out)
UPLOAD=$(jq ".upload.bandwidth*8/1e6" speedtest.out)
echo "down.value $DOWNLOAD"
echo "up.value $UPLOAD"
== Taille de dossiers ==
#!/bin/bash
: <<=cut
=head1 NAME
du - Size of directories
=head1 CONFIGURATION
Put this file in "/usr/local/share/munin/plugins/du_". Then, create a symbolic
link to this file called, for instance, "du_work". "work" will be the name of
the graph.
The configuration should look like the following:
[du_work]
env.directories /path/to/dir1 /path/to/dir2
env.prefix /path/to/
env.critical 1073741824
- "directories" contains a space-separated list of directories to report size of.
- "prefix" (optionnal) is the prefix of directories to hide in graph labels.
- "critical" (optionnal) is the critical size (in bytes) for all directories.
=cut
GRAPH_NAME=${0##*du_}
DIRECTORIES=${directories:-UNSET}
CRITICAL=${critical:-UNSET}
PREFIX=${prefix:-UNSET}
case $1 in
config)
echo "graph_title Directory size $GRAPH_NAME"
echo "graph_category disk"
echo "graph_args --base 1024 -l 0"
echo "graph_vlabel Size"
echo "graph_info Graph of size occupied by directories"
if [ "$DIRECTORIES" != "UNSET" ]; then
for d in $DIRECTORIES
do
slug=$(echo $d | sed 's/\//_/g')
if [ "$PREFIX" != "UNSET" ]; then
echo "${slug}.label ${d#"$PREFIX"}"
else
echo "${slug}.label $d"
fi
echo "${slug}.type GAUGE"
echo "${slug}.draw LINE1"
if [ "$CRITICAL" != "UNSET" ]; then
echo "${slug}.critical $CRITICAL"
fi
done
fi
exit 0;;
esac
if [ "$DIRECTORIES" != "UNSET" ]; then
for d in $DIRECTORIES
do
slug=$(echo $d | sed 's/\//_/g')
echo "${slug}.value $(du -sb $d | cut -f 1)"
done
fi
== Données SMART d'un disque dur ==
[[linux:disks_partitions|Installer et activer]] les données SMART du disque dur.
Copier le plugin ''smart_'', même si Munin ne le suggère pas.
Il est possible de désactiver les avertissements en désactivant la variable ''report_warnings'' directement dans le script.
== Données des disques durs montés dans un sous-dossier de /home ==
Il faut ajouter ''ProtectHome=false'' à la surcharge du service (voir //Autoriser les plugins à accéder au dossier temporaire//) ([[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=921985|Source]])
== SSH ==
[[https://github.com/munin-monitoring/contrib/blob/master/plugins/ssh/sshd_log]]
[sshd_log]
user root
group root
env.logfile /var/log/auth.log
env.type DERIVE
== Autoriser les plugins à accéder au dossier temporaire ==
[[linux:service#surcharger_un_service|Surcharger le service]] ''munin-node'' avec le contenu suivant:
[Service]
PrivateTmp=false
[[https://github.com/munin-monitoring/munin/issues/1236|Source]]
=== Debuguer ===
Il est possible d'exécuter la commande suivante pour simuler la réponse que recevra Munin en interrogeant le plugin:
sudo munin-run
Une façon plus sûre de tester (pour vraiment voir ce que va obtenir le serveur Munin):
nc localhost 4949
# munin node at
fetch
# ... réponse ...
------
==== Installation du serveur ====
apt install munin
Les noeuds dont il faut récolter les données sont définis dans le fichier ''/etc/munin/munin.conf''.
Il est possible de spécifier le port d'écoute des noeuds (par défaut Munin communique sur le port 4949, ne pas oublier de l'ouvrir sur les pare-feus !):
[host]
address 127.0.0.1
port 4950
use_node_name yes
Pour préciser les groupes, visibles dans l'interface web:
[groupe;host]
Les fichiers de l'interface web sont générés dans le dossier ''/var/cache/munin/www''.
=== Changer le thème ===
[[https://github.com/munin-monitoring/contrib/tree/master/templates/munstrap]]
=== Déplacement des données vers un nouveau serveur ===
Il faut copier tous les fichiers ''*.rrd'' du répertoire ''/var/lib/munin/''.
[[https://serverfault.com/questions/130830/change-a-munin-server-and-keep-the-data|Source]]