
Ich bekomme den dynamischen Zoom von Munin nicht zum Laufen. Ich bin mir ziemlich sicher, dass das Problem etwas mit der Nginx-Konfiguration zu tun hat. Jeder Versuch, ein gezoomtes Diagramm zu erzeugen, löst den folgenden Fehlereintrag im Nginx-Protokoll aus:
2015/02/22 13:26:01 [error] 4782#0: *2580 open() "/data/munin/usr/share/munin/cgi/munin-cgi-graph/bellaria/antergos1.bellaria/diskstats_latency/AntergosVG_AntergosRoot-pinpoint=1421756527,1424607727.png" failed (2: No such file or directory), client: 10.10.10.25, server: munin, request: "GET /usr/share/munin/cgi/munin-cgi-graph/bellaria/antergos1.bellaria/diskstats_latency/AntergosVG_AntergosRoot-pinpoint=1421756527,1424607727.png?&lower_limit=&upper_limit=&size_x=800&size_y=400 HTTP/1.1", host: "munin.bellaria", referrer: "http://munin.bellaria/static/dynazoom.html?cgiurl_graph=/usr/share/munin/cgi/munin-cgi-graph&plugin_name=bellaria/antergos1.bellaria/diskstats_latency/AntergosVG_AntergosRoot&size_x=800&size_y=400&start_epoch=1421756527&stop_epoch=1424607727"
Insbesondere vermute ich, dass etwas mit den FastCGI-Parametern nicht stimmt. Kann eine freundliche Seele einen Blick auf meinen virtuellen Munin-Server (siehe unten) werfen und mir erklären, was nicht stimmt? Es macht mich verrückt – aber ich habe das Gefühl, dass jeder Experte das Problem in Sekundenbruchteilen identifizieren wird …
# Munin server
server {
listen 80;
server_name munin munin.bellaria;
root /data/munin;
allow all;
access_log logs/munin.access.log;
error_log logs/munin.error.log;
location / {
index index.html index.htm index.php;
}
location ~ \.(php|html|html|cgi)$ {
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param AUTH_USER $remote_user;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi.conf;
}
location ^~ /cgi-bin/munin-cgi-graph/ {
access_log off;
fastcgi_split_path_info ^(/cgi-bin/munin-cgi-graph)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/munin/fcgi-graph.sock;
include fastcgi_params;
}
}
Antwort1
Ich habe dies gefunden, als ich nach einer Lösung für mein Problem gesucht habe, und gute Neuigkeiten! Ich habe mein Problem gelöst. Ich hoffe, dies hilft Ihnen, Munin auch auf Ihrem Setup zum Laufen zu bringen.
Anforderungen:
- Klonen oder laden Sie die Zip-Datei von https://github.com/lighttpd/spawn-fcgi herunter.
- Bereite es vor:
autoreconf -v -i
- Kompilieren und installieren:
./konfigurieren && make && sudo make install
#! /bin/sh ### BEGINNEN INIT INFO # Bietet: munin-fastcgi # Erforderlicher Start: $remote_fs $network # Erforderlicher Stopp: $remote_fs $network # Standard-Start: 2 3 4 5 # Standard-Stopp: 0 1 6 # Kurzbeschreibung: startet munin-fastcgi # Beschreibung: Spawn Munin FCGI-Sockets für den Webzugriff ### ENDE INIT INFO # # munin-fastcgi Startskript für Munin CGI-Dienste # # chkconfig: - 84 15 # Beschreibung: Laden von Munin CGI-Diensten mit spawn-cgi # HTML-Dateien und CGI. # # Autor: Ryan Norbauer # Geändert: Geoffrey Grosenbach http://topfunky.com # Geändert: David Krmpotic http://davidhq.com # Geändert: Kun Xi http://kunxi.org # Geändert: http://drumcoder.co.uk/ # Geändert: http://uname.pingveno.net/ # Geändert: the_architecht http://iwbyt.com/ PATH=/usr/local/bin/:/usr/local/sbin:$PATH DAEMON=$(welches fcgi spawnt) FCGI_GRAPH_SOCK=/var/run/munin/fastcgi-munin-graph.sock FCGI_HTML_SOCK=/var/run/munin/fastcgi-munin-html.sock WWW_USER=www-Daten FCGI_USER=www-Daten FCGI_GROUP=www-Daten 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 für Graph und HTML" # Beenden Sie ordnungsgemäß, wenn das Paket entfernt wurde. test -x $DAEMON || beenden 0 test -x $FCGI_SPAWN_GRAPH || beenden 0 test -x $FCGI_SPAWN_HTML || beenden 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 läuft bereits" $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 läuft bereits" } stoppen() { kill -QUIT `cat $PIDFILE_GRAPH` || echo "Graph läuft nicht" kill -QUIT `cat $PIDFILE_HTML` || echo "HTML läuft nicht" } Neustart() { kill -HUP `cat $PIDFILE_GRAPH` || echo "Graph kann nicht neu geladen werden" kill -HUP `cat $PIDFILE_HTML` || echo "HTML kann nicht neu geladen werden" } Fall "$1" in Start) echo "$DESC wird gestartet: " Start ;; stoppen) echo "$DESC wird gestoppt: " stoppen ;; neu starten|neu laden) echo "$DESC wird neu gestartet: " stoppen # Eine Sekunde reicht möglicherweise nicht aus, um einen Daemon zu stoppen. # wenn dies geschieht, wird d_start fehlschlagen (und dpkg wird abstürzen, wenn # das Paket wird aktualisiert). Ändern Sie bei Bedarf das Timeout # sein, oder ändern Sie d_stop, damit der Start-Stop-Daemon --retry verwendet. # Beachten Sie, dass die Verwendung von --retry den Herunterfahrvorgang etwas verlangsamt. Schlaf 1 Start ;; *) echo "Verwendung: $SCRIPTNAME {start|stop|restart|reload}" >&2 Ausfahrt 3 ;; esac beenden $?
Installieren Sie das obige unter /etc/init.d/munin-fcgi
mit Berechtigungen755
/etc/nginx/conf.d/example.com.conf
in den server { }
Block ein. Sie können die zulässigen IP-Blöcke ändern, damit sie zu Ihrem Setup passen. Ich habe dies auf einem lokalen Server getan und wollte, dass die Munin-Diagramme nur lokal verfügbar sind.
Standort /munin { # Alias /var/cache/munin/www; Index Index.html; # /etc/nginx/php.conf einschließen; # Zugriff_abmelden; 127.0.0.1 zulassen; erlaube 192.168.0.0/16; alles leugnen; } Standort ^~ /munin-cgi/munin-cgi-graph/ { # wenn ($uri ~ /munin-cgi/munin-cgi-graph/([^/]*)) { setze $path $1; } fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*); fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass unix:/var/run/munin/fastcgi-munin-graph.sock; fastcgi_params einschließen; } Standort ^~ /munin-cgi/munin-cgi-html/ { # wenn ($uri ~ /munin-cgi/munin-cgi-html/([^/]*)) { setze $path $1; } fastcgi_split_path_info ^(/munin-cgi/munin-cgi-html)(.*); fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass unix:/var/run/munin/fastcgi-munin-html.sock; fastcgi_params einschließen; }
/etc/init.d/munin-fcgi start
und laden Sie nginx neu, dann kann es losgehen.PS: Ich habe Munins HTML-Ordner mit dem Ordner meines virtuellen Hosts verknüpft: ln -s /var/cache/munin/www/ /var/www/example.com/munin -v
.
Antwort2
Das klingt nach einem Problem mit den Definitionen in static/dynazoom.html
. In unserer Installation haben wir
form.cgiurl_graph.value = qs.get("cgiurl_graph", "/munin-cgi/munin-cgi-graph");
Ich vermute, Sie haben
form.cgiurl_graph.value = qs.get("cgiurl_graph", "/usr/share/munin/cgi/munin-cgi-graph");
Es sollte zwar
form.cgiurl_graph.value = qs.get("cgiurl_graph", "/cgi-bin/munin-cgi-graph");
Ich bin immer noch davon überzeugt, dass hier das Problem liegt. Die Nginx-Konfiguration sieht korrekt aus, solange Anfragen für gezoomte Grafiken mit beginnen /cgi-bin/munin-cgi-graph
. Ich weiß nicht, woher /data/munin/...
das kommt.
Versuchen Sie es in einer Umgebung, in der Sie die vom Browser gesendeten Anfragen überwachen (Fiddler, Chrome-Entwicklertools) und sehen können, was wirklich gesendet wird.
Sind Sie sicher, dass Sie die richtige Kopie von Dynazoom bearbeiten? Versuchen Sie, eine geringfügige sichtbare Änderung vorzunehmen, um dies zu überprüfen.
Antwort3
Ich hatte ein ähnliches Problem unter Ubuntu 12.04 mit Munin 2.0.21.
Überprüfen Sie, wo Dynazoom versucht, Munin-CGI-Graph zu finden.
Munins Wiki sagtdass Sie Ihren nginx fcgi-graph konfigurieren sollten für
location ^~ /cgi-bin/munin-cgi-graph/
In meinem Fall, als ich die Seite mit dem Chrome-Entwicklertool (Registerkarte „Netzwerk“) untersuchte, stellte ich fest, dass Dynazoom versuchte, Munin-CGI-Graph abzurufen von/munin-cgi/munin-cgi-graph/nicht von/cgi-bin/munin-cgi-graph/und es kommt zu einem 404-Fehler statt einem Diagramm
Also habe ich einfach diesen Speicherort in der Nginx-Konfiguration geändert:
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:/var/run/munin/fcgi-graph.sock;
include fastcgi_params;
}
Sieht aus, als hätten Sie dasselbe Problem. Der Speicherort Ihres Munin-CGI-Graphs ist falsch, sodass Browseranforderungen root /data/munin
genau so weitergeleitet werden, wie der Fehler anzeigt.
Antwort4
Ich wollte noch etwas zu dieser Unterhaltung hinzufügen. Die Informationen von the_architecht waren ziemlich wertvoll, aber zumindest für mich fehlte etwas.
Hier wird CentOS 6.8 verwendet:
-
1) Pfade für die CGI-Dateien geändert, diese können über „locate“ gefunden werden:
/var/www/cgi-bin/munin-cgi-graph
/var/www/cgi-bin/munin-cgi-html
Ich musste das Startskript Zeile für Zeile durchgehen, um die Speicherorte zu vergleichen und die Startzeilen des Daemons aufzuschlüsseln, um zu sehen, was falsch war. So konnte ich die Unterschiede in den Dateipfaden aufspüren.
-
2) Die Berechtigungen für die Protokolle waren auf den Benutzer „munin“ festgelegt, was zu einer Art stillem Fehler führte. Um dies zu lösen, habe ich den Benutzer www-data zur Gruppe munin hinzugefügt und die Protokolldateien mit chmod 664 versehen:
-rw-rw-r-- 1 munin munin 0 Apr 27 20:35 /var/log/munin/munin-cgi-graph.log
-rw-rw-r-- 1 munin munin 0 Apr 27 20:35 /var/log/munin/munin-cgi-html.log
Das Verraten der Dateiberechtigungen betraf dieMunin-WikiHinzufügen von -n am Ende des Spawn-FCGI-Prozessstarts und strace -s1024, was einen Fehler verursachte
write(2, "[Do 27 Apr 2017 21:47:35] munin-cgi-html: Kann /var/log/munin/munin-cgi-html.log nicht öffnen (Zugriff verweigert) bei /usr/share/perl5/vendor_perl/Log/Log4perl/Appender/File.pm Zeile 103.\n", 180[Do 27 Apr 2017 21:47:35] munin-cgi-html: Kann /var/log/munin/munin-cgi-html.log nicht öffnen (Zugriff verweigert) bei /usr/share/perl5/vendor_perl/Log/Log4perl/Appender/File.pm Zeile 103.
Unten sehen Sie mein endgültiges Nginx und Spawn-FCGI mit meinen Änderungen:
server {
listen $IP;
server_name $host.example.com;
access_log /var/log/nginx/domlogs/munin-access.log;
error_log /var/log/nginx/domlogs/munin-error.log;
root /var/www/html/munin/;
index index.html;
location / {
auth_basic "Restricted";
# Create the htpasswd file with the htpasswd tool.
auth_basic_user_file /etc/nginx/htpasswd/munin;
}
location ^~ /munin-cgi/munin-cgi-graph/ {
# if ($uri ~ /munin-cgi/munin-cgi-graph/([^/]*)) { set $path $1; }
fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/munin/fastcgi-munin-graph.sock;
include fastcgi_params;
}
location ^~ /munin-cgi/munin-cgi-html/ {
# if ($uri ~ /munin-cgi/munin-cgi-html/([^/]*)) { set $path $1; }
fastcgi_split_path_info ^(/munin-cgi/munin-cgi-html)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/munin/fastcgi-munin-html.sock;
include fastcgi_params;
}
}
#! /bin/bash
### 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 Web access
### END INIT INFO
#
# munin-fastcgi Startup script for Munin CGI services
#
# chkconfig: - 84 15
# description: Loading Munin CGI services using spawn-cgi
# HTML files and CGI.
#
# Author: Ryan Norbauer
# Modified: Geoffrey Grosenbach http://topfunky.com
# Modified: David Krmpotic http://davidhq.com
# Modified: Kun Xi http://kunxi.org
# Modified: http://drumcoder.co.uk/
# Modified: http://uname.pingveno.net/
# Modified: the_architecht http://iwbyt.com/
# Modified: Jame Scott - NeCr0mStR
DESC="Munin FCGI for Graph and HTML"
SCRIPTNAME="$(tput setaf 1)Munin-FastCGI$(tput sgr0)"
PATH=/usr/local/bin/:/usr/local/sbin:$PATH
DAEMON=$(which spawn-fcgi)
FCGI_GRAPH_SOCK=/var/run/munin/fastcgi-munin-graph.sock
FCGI_HTML_SOCK=/var/run/munin/fastcgi-munin-html.sock
WWW_USER=www-data
FCGI_USER=www-data
FCGI_GROUP=www-data
FCGI_SPAWN_GRAPH=/var/www/cgi-bin/munin-cgi-graph
FCGI_SPAWN_HTML=/var/www/cgi-bin/munin-cgi-html
PIDFILE_GRAPH=/var/run/munin/fastcgi-munin-graph.pid
PIDFILE_HTML=/var/run/munin/fastcgi-munin-html.pid
# 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_graph() {
if [[ $(/bin/ps ax | awk '/munin-cgi-graph$/ {print $1}') ]];then
local RUNNING_PID_GRAPH=$(/bin/ps ax | awk '/munin-cgi-graph$/ {print $1}')
fi
if [[ -s ${PIDFILE_GRAPH} && ${RUNNING_PID_GRAPH} = $(cat ${PIDFILE_GRAPH}) ]];then
echo -e "\nMunin-Graph already running"
elif [[ -n ${RUNNING_PID_GRAPH} && ${RUNNING_PID_GRAPH} != $(cat ${PIDFILE_GRAPH}) && -S ${FCGI_GRAPH_SOCK} ]];then
echo -e "\nMunin-Graph PID mismatch :: Cleaning up and starting Munin-Graph"
kill -QUIT ${RUNNING_PID_GRAPH}
sleep 1
$DAEMON -s $FCGI_GRAPH_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_GRAPH $FCGI_SPAWN_GRAPH > /dev/null 2>&1
else
$DAEMON -s $FCGI_GRAPH_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_GRAPH $FCGI_SPAWN_GRAPH > /dev/null 2>&1
echo -e "Starting Munin-Graph\n"
fi
}
start_html() {
if [[ $(/bin/ps ax | awk '/munin-cgi-html$/ {print $1}') ]];then
local RUNNING_PID_HTML=$(/bin/ps ax | awk '/munin-cgi-html$/ {print $1}')
fi
if [[ -s ${PIDFILE_HTML} && ${RUNNING_PID_HTML} = $(cat ${PIDFILE_HTML}) ]];then
echo -e "\nMunin-HTML already running"
elif [[ -n ${RUNNING_PID_HTML} && ${RUNNING_PID_HTML} != $(cat ${PIDFILE_HTML}) && -S ${FCGI_HTML_SOCK} ]];then
echo -e "\nMunin-HTML PID mismatch :: Cleaning up and starting Munin-HTML"
kill -QUIT ${RUNNING_PID_HTML}
sleep 1
$DAEMON -s $FCGI_HTML_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_HTML $FCGI_SPAWN_HTML > /dev/null 2>&1
else
$DAEMON -s $FCGI_HTML_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_HTML $FCGI_SPAWN_HTML > /dev/null 2>&1
echo -e "Starting Munin-HTML\n"
fi
}
stop_graph() {
if [[ $(/bin/ps ax | awk '/munin-cgi-graph$/ {print $1}') ]];then
local RUNNING_PID_GRAPH=$(/bin/ps ax | awk '/munin-cgi-graph$/ {print $1}')
fi
if [[ -s ${PIDFILE_GRAPH} && $(cat ${PIDFILE_GRAPH}) = ${RUNNING_PID_GRAPH} ]];then
kill -QUIT $(cat ${PIDFILE_GRAPH})
echo -e "\nMunin-Graph stopped"
elif [[ -z ${RUNNING_PID_GRAPH} && -s ${PIDFILE_GRAPH} ]];then
echo -e "\nGraph PID not found :: Cleaning up PID file"
rm ${PIDFILE_GRAPH}
elif [[ -s ${PIDFILE_GRAPH} && $(cat ${PIDFILE_GRAPH}) != ${RUNNING_PID_GRAPH} ]];then
kill -QUIT ${RUNNING_PID_GRAPH}
rm ${PIDFILE_GRAPH}
echo -e "\nMunin-Graph stopped :: Cleaning up PID file"
else
echo -e "\nNo Munin-Graph process found"
fi
}
stop_html() {
if [[ $(/bin/ps ax | awk '/munin-cgi-html$/ {print $1}') ]];then
local RUNNING_PID_HTML=$(/bin/ps ax | awk '/munin-cgi-html$/ {print $1}')
fi
if [[ -s ${PIDFILE_HTML} && $(cat ${PIDFILE_HTML}) = ${RUNNING_PID_HTML} ]];then
kill -QUIT $(cat ${PIDFILE_HTML})
echo -e "\nMunin-HTML stopped"
elif [[ -z ${RUNNING_PID_HTML} && -s ${PIDFILE_HTML} ]];then
echo -e "\nHTML PID not found :: Cleaning up PID file"
rm ${PIDFILE_HTML}
elif [[ -s ${PIDFILE_HTML} && $(cat ${PIDFILE_HTML}) != ${RUNNING_PID_HTML} ]];then
kill -QUIT ${RUNNING_PID_HTML}
rm ${PIDFILE_HTML}
echo -e "\nMunin-HTML stopped :: Cleaning up PID file"
else
echo -e "\nNo Munin-HTML process found"
fi
}
case "$1" in
start)
echo "Starting $DESC: "
start_graph
start_html
;;
start_graph)
echo "Starting Munin-Graph"
start_graph
;;
start_html)
echo "Starting Munin-HTML"
start_html
;;
stop_graph)
echo "Stopping Munin_Graph"
stop_graph
;;
stop_html)
echo "Stopping Munin-HTML"
stop_html
;;
stop)
echo "Stopping $DESC: "
stop_graph
stop_html
;;
restart|reload)
echo "Restarting $DESC: "
stop_html
stop_graph
# One second might not be time enough for a daemon to stop,
# if this happens, d_start will fail (and dpkg will break if
# the package is being upgraded). Change the timeout if needed
# be, or change d_stop to have start-stop-daemon use --retry.
# Notice that using --retry slows down the shutdown process somewhat.
sleep 5
start_graph
start_html
;;
*)
echo "$(tput setaf 2)Usage: $SCRIPTNAME $(tput setaf 7)$(tput setab 0){start_graph|start_html|stop_graph|stop_html|start|stop|restart|reload}$(tput sgr0) " >&2
exit 3
;;
esac
exit $?