munin + nginx: kein Dynazoom in Diagramme

munin + nginx: kein Dynazoom in Diagramme

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:

  • : spawnfcgi:

    1. Klonen oder laden Sie die Zip-Datei von https://github.com/lighttpd/spawn-fcgi herunter.
    2. Bereite es vor:
      autoreconf -v -i
    3. Kompilieren und installieren:
      ./konfigurieren && make && sudo make install

  • Init-Skripte (ich verwende kein systemd, finde also heraus, wie man einen Dienst erstellt):

    #! /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-fcgimit Berechtigungen755

  • Fügen Sie dies beispielsweise in Ihrem virtuellen Host /etc/nginx/conf.d/example.com.confin 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;
    }
    

  • Starten /etc/init.d/munin-fcgi startund 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/muningenau 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 $?
    

    verwandte Informationen