Après avoir installé Munin sur un nouveau serveur je me suis rendu compte que je ne pouvais pas zoomer sur mes graphiques : erreur 404 et 500. C’est en fait la génération dynamique de graphiques qui ne fonctionnait pas. Voyons comment la paramétrer.
Génération dynamique de graphiques sous Munin
Ici je pars du principe que Munin est déjà installé et configuré sur votre serveur.
Nous allons avoir besoin d’installer quelques paquets pour faire fonctionner la génération dynamique de graphiques sous Munin
sudo apt-get install spawn-fcgi rrdcached -y
Modifiez la configuration de rrdcached
sudo nano /etc/default/rrdcached
Ajoutez
OPTS="-s www-data -l unix:/run/rrdcached.sock -b /var/lib/munin/ -B -j /var/lib/munin/journal/ -F"
Redémarrez rrdcached
sudo service rrdcached restart
Éditez maintenant la configuration de Munin
sudo nano /etc/munin/munin.conf
Ajoutez les paramètres suivants
cgitmpdir /var/lib/munin/cgi-tmp graph_strategy cgi cgiurl_graph /munin-cgi/munin-cgi-graph html_strategy cgi rrdcached_socket /var/run/rrdcached.sock
Nous allons maintenant devoir configurer deux scripts de démarrage automatique pour spawn fcgi
sudo nano /etc/init.d/spawn-fcgi-munin-html
Collez la configuration suivante
#! /bin/sh
### BEGIN INIT INFO
# Provides: spawn-fcgi-munin-html
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: starts FastCGI for Munin-Html
### END INIT INFO
# --------------------------------------------------------------
# Munin-CGI-Html Spawn-FCGI Startscript by Julien Schmidt
# eMail: munin-trac at julienschmidt.com
# www: http://www.julienschmidt.com
# --------------------------------------------------------------
# Install:
# 1. Copy this file to /etc/init.d
# 2. Edit the variables below
# 3. run "update-rc.d spawn-fcgi-munin-html defaults"
# --------------------------------------------------------------
# Special thanks for their help to:
# Frantisek Princ
# Jérôme Warnier
# --------------------------------------------------------------
# Last Update: 14. February 2013
#
# Please change the following variables:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=spawn-fcgi-munin-html
PID_FILE=/var/run/munin/$NAME.pid
SOCK_FILE=/var/run/munin/$NAME.sock
SOCK_USER=www-data
FCGI_USER=www-data
FCGI_GROUP=www-data
FCGI_WORKERS=2
DAEMON=/usr/bin/spawn-fcgi
DAEMON_OPTS="-s $SOCK_FILE -F $FCGI_WORKERS -U $SOCK_USER -u $FCGI_USER -g $FCGI_GROUP -P $PID_FILE -- /usr/lib/munin/cgi/munin-cgi-html"
# --------------------------------------------------------------
# No edits necessary beyond this line
# --------------------------------------------------------------
if [ ! -x $DAEMON ]; then
echo "File not found or is not executable: $DAEMON!"
exit 0
fi
status() {
if [ ! -r $PID_FILE ]; then
return 1
fi
for FCGI_PID in `cat $PID_FILE`; do
if [ -z "${FCGI_PID}" ]; then
return 1
fi
FCGI_RUNNING=`ps -p ${FCGI_PID} | grep ${FCGI_PID}`
if [ -z "${FCGI_RUNNING}" ]; then
return 1
fi
done;
return 0
}
start() {
if status; then
echo "FCGI is already running!"
exit 1
else
$DAEMON $DAEMON_OPTS
fi
}
stop () {
if ! status; then
echo "No PID-file at $PID_FILE found or PID not valid. Maybe not running"
exit 1
fi
# Kill processes
for PID_RUNNING in `cat $PID_FILE`; do
kill -9 $PID_RUNNING
done
# Remove PID-file
rm -f $PID_FILE
# Remove Sock-File
rm -f $SOCK_FILE
}
case "$1" in
start)
echo "Starting $NAME: "
start
echo "... DONE"
;;
stop)
echo "Stopping $NAME: "
stop
echo "... DONE"
;;
force-reload|restart)
echo "Stopping $NAME: "
stop
echo "Starting $NAME: "
start
echo "... DONE"
;;
status)
if status; then
echo "FCGI is RUNNING"
else
echo "FCGI is NOT RUNNING"
fi
;;
*)
echo "Usage: $0 {start|stop|force-reload|restart|status}"
exit 1
;;
esac
exit 0
Créons notre second script
sudo nano /etc/init.d/spawn-fcgi-munin-graph
Collez la configuration suivante
#! /bin/sh
### BEGIN INIT INFO
# Provides: spawn-fcgi-munin-graph
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: starts FastCGI for Munin-Graph
### END INIT INFO
# --------------------------------------------------------------
# Munin-CGI-Graph Spawn-FCGI Startscript by Julien Schmidt
# eMail: munin-trac at julienschmidt.com
# www: http://www.julienschmidt.com
# --------------------------------------------------------------
# Install:
# 1. Copy this file to /etc/init.d
# 2. Edit the variables below
# 3. run "update-rc.d spawn-fcgi-munin-graph defaults"
# --------------------------------------------------------------
# Special thanks for their help to:
# Frantisek Princ
# Jérôme Warnier
# --------------------------------------------------------------
# Last Update: 14. February 2013
#
# Please change the following variables:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=spawn-fcgi-munin-graph
PID_FILE=/var/run/munin/$NAME.pid
SOCK_FILE=/var/run/munin/$NAME.sock
SOCK_USER=www-data
FCGI_USER=www-data
FCGI_GROUP=www-data
#FCGI_GROUP=munin
FCGI_WORKERS=4
DAEMON=/usr/bin/spawn-fcgi
DAEMON_OPTS="-s $SOCK_FILE -F $FCGI_WORKERS -U $SOCK_USER -u $FCGI_USER -g $FCGI_GROUP -P $PID_FILE -- /usr/lib/munin/cgi/munin-cgi-graph"
# --------------------------------------------------------------
# No edits necessary beyond this line
# --------------------------------------------------------------
if [ ! -x $DAEMON ]; then
echo "File not found or is not executable: $DAEMON!"
exit 0
fi
status() {
if [ ! -r $PID_FILE ]; then
return 1
fi
for FCGI_PID in `cat $PID_FILE`; do
if [ -z "${FCGI_PID}" ]; then
return 1
fi
FCGI_RUNNING=`ps -p ${FCGI_PID} | grep ${FCGI_PID}`
if [ -z "${FCGI_RUNNING}" ]; then
return 1
fi
done;
return 0
}
start() {
if status; then
echo "FCGI is already running!"
exit 1
else
$DAEMON $DAEMON_OPTS
fi
}
stop () {
if ! status; then
echo "No PID-file at $PID_FILE found or PID not valid. Maybe not running"
exit 1
fi
# Kill processes
for PID_RUNNING in `cat $PID_FILE`; do
kill -9 $PID_RUNNING
done
# Remove PID-file
rm -f $PID_FILE
# Remove Sock-File
rm -f $SOCK_FILE
}
case "$1" in
start)
echo "Starting $NAME: "
start
echo "... DONE"
;;
stop)
echo "Stopping $NAME: "
stop
echo "... DONE"
;;
force-reload|restart)
echo "Stopping $NAME: "
stop
echo "Starting $NAME: "
start
echo "... DONE"
;;
status)
if status; then
echo "FCGI is RUNNING"
else
echo "FCGI is NOT RUNNING"
fi
;;
*)
echo "Usage: $0 {start|stop|force-reload|restart|status}"
exit 1
;;
esac
exit 0
Rendez ces scripts exécutables
sudo chmod a+x /etc/init.d/spawn-fcgi-munin-html && sudo chmod a+x /etc/init.d/spawn-fcgi-munin-graph
Configurons les pour qu’ils s’exécutent à chaque démarrage
sudo update-rc.d spawn-fcgi-munin-html defaults && sudo update-rc.d spawn-fcgi-munin-graph defaults
Maintenant lançons les
sudo /etc/init.d/spawn-fcgi-munin-html start sudo /etc/init.d/spawn-fcgi-munin-graph start
Configurez / modifiez votre vhost Munin de la manière suivante
server {
listen 80;
server_name munin.votre-domain.tld;
return 301 https://munin.votre-domain.tld$request_uri;}
server {
#------------------------------------------------------------------------
# GENERAL
#
listen 443 ssl;
server_name munin.votre-domain.tld;
root /var/cache/munin/www;
index index.php index.html index.htm;
#------------------------------------------------------------------------
# SSL
#
ssl_certificate /chemin/vers/votre/certificat;
ssl_certificate_key /chemin/vers/la/clé/de/votre/certificat;
ssl_protocols TLSv1.2;
ssl_dhparam /etc/nginx/ssl/dh4096.pem;
ssl_ecdh_curve secp384r1;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;
# ssl optimizations
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_buffer_size 8k;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
#------------------------------------------------------------------------
# MUNIN
#
location / {
# First attempt to serve request as file, then
# as directory, then fall back to index.html
try_files $uri $uri/ munin-cgi/$uri /index.html;
add_header Cache-Control no-cache;
}
# Munin cgi-graph
location ^~ /munin-cgi/munin-cgi-graph/ {
access_log off;
fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/run/munin/spawn-fcgi-munin-graph.sock;
include fastcgi_params;
add_header Cache-Control no-cache;
}
location /munin-cgi/static/ {
alias /etc/munin/static/;
add_header Cache-Control no-cache;
}
# Munin cgi-html
location /munin-cgi/ {
fastcgi_split_path_info ^(/munin-cgi)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/run/munin/spawn-fcgi-munin-html.sock;
include fastcgi_params;
add_header Cache-Control no-cache;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;}
}
Rechargez la configuration de NGinx
sudo service nginx reload
Connectez vous à votre instance web et vous constaterez que la génération dynamique de graphiques sous Munin fonctionne désormais
Source
- Erick Ocrospoma, Munin + NGinx on Debian