Fonctionnement: un serveur va se connecter à des nœuds pour récupérer les données toutes les 5 min.
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/<plugin> 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.
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; }
Pour MySQL, il faut installer le paquet libcache-cache-perl.
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=$envtokenPour 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"
#!/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
Installer et activer les données SMART du disque dur.
Copier le plugin smart_<disque dur>, 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.
Il faut ajouter ProtectHome=false à la surcharge du service (voir Autoriser les plugins à accéder au dossier temporaire) (Source)
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
Il est possible d'exécuter la commande suivante pour simuler la réponse que recevra Munin en interrogeant le plugin:
sudo munin-run <plugin>
Une façon plus sûre de tester (pour vraiment voir ce que va obtenir le serveur Munin):
nc localhost 4949 # munin node at <hostname> fetch <plugin> # ... réponse ...
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.
Il faut copier tous les fichiers *.rrd du répertoire /var/lib/munin/.