Debian 9 Stretch: configurer Munin avec Spawn-fgci sous nginx
dim, 07/09/2017 - 18:37 — geek17Nous avons vu dans l'article précédent comment installer Munin pour monitorer les performances de son serveur.
Dans cet article, nous allons configurer Munin pour qu'il ne génère plus les images des graphiques à chaque lecture des données monitorées.
Il utilisera à la place des scripts FCGI pour les générer en live lorsque l'on consultera les données.
Cela permet de limiter la charge CPU du serveur qui ne sera plus sollicité toutes les 5 minutes pour rafraichir les graphiques.
Installation de Spawn-fgci
On installe tout d'abords le paquet Spawn-fgci
J'installe aussi libcgi-fast-perl pour être certain que ce package soit installé. Sinon, vous aurez le message spawn-fcgi: child exited with: 2 au démarrage des sockets et vous chercherez longtemps pourquoi...
sudo apt-get install spawn-fcgi libcgi-fast-perl
Puis nous démarrons les 2 sockets FCGI qui se chargeront de générer les graphiques et les pages HTML de Munin, lors de la consultation.
sudo spawn-fcgi -s /var/run/munin/fcgi-graph.sock -U www-data -u www-data -g www-data /usr/lib/munin/cgi/munin-cgi-graph
sudo spawn-fcgi -s /var/run/munin/fcgi-html.sock -U www-data -u www-data -g www-data /usr/lib/munin/cgi/munin-cgi-html
A titre d'info, si vous avez une erreur au démarrage du socket, ajoutez -n à la ligne de commande pour obtenir plus de détails sur les raisons de l'erreur
Création d'un service pour démarrer Spawn-fgci
Nous allons maintenant ajouter un script qui lancera automatiquement ces 2 lignes de commandes au démarrage du serveur
sudo nano /etc/init.d/munin-fastcgi
Voici le contenu du script
#! /bin/sh
### BEGIN INIT INFO
# Provides: munin-fastcgi
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts munin-fastcgi
# Description: Spawn Munin FCGI sockets for Graph an HTML
### END INIT INFO
#
# Sources:
# https://www.geek17.com/fr/content/debian-9-stretch-configurer-munin-avec-spawn-fgci-sous-nginx-74
#
DAEMON=/usr/bin/spawn-fcgi
FCGI_GRAPH_SOCK=/var/run/munin/fcgi-graph.sock
FCGI_HTML_SOCK=/var/run/munin/fcgi-html.sock
WWW_USER=www-data
FCGI_USER=www-data
FCGI_GROUP=www-data
FCGI_SPAWN_GRAPH=/usr/lib/munin/cgi/munin-cgi-graph
FCGI_SPAWN_HTML=/usr/lib/munin/cgi/munin-cgi-html
PIDFILE_GRAPH=/var/run/munin/fastcgi-munin-graph.pid
PIDFILE_HTML=/var/run/munin/fastcgi-munin-html.pid
DESC="Munin FCGI for Graph an HTML"
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
test -x $FCGI_SPAWN_GRAPH || exit 0
test -x $FCGI_SPAWN_HTML || exit 0
start() {
$DAEMON -s $FCGI_GRAPH_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_GRAPH $FCGI_SPAWN_GRAPH 2> /dev/null || echo "Graph Already running"
$DAEMON -s $FCGI_HTML_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_HTML $FCGI_SPAWN_HTML 2> /dev/null || echo "HTML Already running"
}
stop() {
kill -QUIT `cat $PIDFILE_GRAPH` || echo "Graph not running"
kill -QUIT `cat $PIDFILE_HTML` || echo "HTML Not running"
}
case "$1" in
start)
echo "Starting $DESC: "
start
;;
stop)
echo "Stopping $DESC: "
stop
;;
restart|reload)
echo "Restarting $DESC: "
stop
# Sleep 2s to let enough for the daemons to stop
sleep 2
start
;;
status)
if netstat -ln | grep "fcgi-graph"; then
echo "Service running"
exit 0
else
echo "Service stopped"
exit 3
fi
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|reload|status}" >&2
exit 3
;;
esac
exit $?
Si vous souhaitez plus d'info sur la création d'un script de démarrage, je vous invite à consulter http://sysadmin.tme520.net/creez-des-scripts-dinit-au-standard-lsb/
On rend ce script exécutable
sudo chmod +x /etc/init.d/munin-fastcgi
Et on actualise les services
sudo update-rc.d munin-fastcgi defaults
Vous pouvez faire un sudo reboot pour vérifier que les 2 sockets sont bien activés au démarrage du serveur.
sudo service munin-fastcgi start
Voila, au prochain reboot : les 2 sockets seront automatiquement relancés.
Modification de la configuration de Munin
Il faut maintenant indiquer à Munin d'utiliser les sockets FCGI pour générer les graphiques et les pages HTML.
On ouvre donc le fichier de configuration de Munin
sudo nano /etc/munin/munin.conf
Puis rechercher les lignes ci-dessous et adapter la valeur des variables comme indiqué ci-dessous
graph_strategy cgi
html_strategy cgi
Ajustement de la configuration du vHost
Il faut ensuite ajouter quelques lignes à la configuration du vHost Munin pour qu'il utilise les scripts FCGI.
On ouvre la config de notre vHost Munin
sudo nano /etc/nginx/conf.d/default.conf
Pour corriger la partie dédiée à Munin pour qu'elle soit identique à ci-dessous
server {
....
# Munin --> Start
location ^~ /munin-cgi/munin-cgi-graph/ {
fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/munin/fcgi-graph.sock;
include fastcgi_params;
}
location /munin/static/ {
alias /etc/munin/static/;
expires modified +1w;
}
# To fix a strange bug with the zoom pages!
location /munin/localdomain/localhost.localdomain/static/ {
alias /etc/munin/static/;
expires modified +1w;
}
location /munin/ {
fastcgi_split_path_info ^(/munin)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/munin/fcgi-html.sock;
include fastcgi_params;
}
# Munin --> End
....
}
Reste enfin à redémarrer les services Nginx et Munin
sudo service nginx restart
sudo service munin-node restart
Vérifier que tout fonctionne correctement et vous pouvez constater dans les graphiques Munin que la charge de Munin est maintenant réduite.
Dans l'article suivant, nous allons installer 2 plugins complémentaires pour minotorer les requêtes traitées par nginx et les nombre de connexion sur la base Mysql.
Sources : http://guide.munin-monitoring.org/en/stable-2.0/example/webserver/nginx.html