====== 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]]