Debian 9 Stretch: configurer Munin avec Spawn-fgci sous nginx

Nous 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 smiley

 

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

Commentaires

Dude, you have no idea how much I searched why am I having this "spawn-fcgi: child exited with: 2" error, thanks!!!

Excellent, merci !

Ajouter un commentaire

You must have Javascript enabled to use this form.