munin + nginx:沒有 dynazoom 到圖表中

munin + nginx:沒有 dynazoom 到圖表中

我無法讓 Munin 動態變焦工作。我相當確定該問題與 Nginx 配置有關。任何產生縮放圖的嘗試都會觸發 nginx 日誌中的以下錯誤條目:

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"

具體來說,我懷疑 fastCGI 參數有問題。好心人可以看看我的 Munin 虛擬伺服器(見下文)並向我解釋一下出了什麼問題嗎?這讓我發瘋 - 但我有一種預感,任何專家都會在不到一秒的時間內找出問題所在...

# 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;
    }

   }

答案1

我在尋找問題的解決方案時發現了這個,好消息!我解決了我的問題。我希望這也能幫助您讓 munin 完成您的設定。

要求:

  • 生成fcgi:

    1. 從 https://github.com/lighttpd/spawn-fcgi 克隆或下載 zip
    2. 準備一下:
      自動重新配置-v -i
    3. 編譯並安裝:
      ./configure && make && sudo make install

  • 初始化腳本(我不做 systemd,所以弄清楚如何建立服務):

    #! /bin/sh
    ### 開始初始化訊息
    # 提供:munin-fastcgi
    # 必要啟動:$remote_fs $network
    # 必要停止:$remote_fs $network
    # 預設開始:2 3 4 5
    # 預設停止:0 1 6
    # 簡短描述:啟動 munin-fastcgi
    # 描述:產生用於 Web 存取的 Munin FCGI 套接字
    ### 結束初始化訊息
    
    #
    # munin-fastcgi Munin CGI 服務的啟動腳本
    #
    # chkconfig: - 84 15
    # 描述:使用spawn-cgi裝載Munin CGI服務
    # HTML 檔案和 CGI​​。
    #
    # 作者:瑞安諾鮑爾
    # 修改:Geoffrey Grosenbach http://topfunky.com
    # 修改:David Krmpotic http://davidhq.com
    # 修改:坤兮 http://kunxi.org
    # 修改:http://drumcoder.co.uk/
    # 修改:http://uname.pingveno.net/
    # 修改:the_architecht http://iwbyt.com/
    PATH=/usr/local/bin/:/usr/local/sbin:$PATH
    DAEMON=$(它產生-fcgi)
    FCGI_GRAPH_SOCK=/var/run/munin/fastcgi-munin-graph.sock
    FCGI_HTML_SOCK=/var/run/munin/fastcgi-munin-html.sock
    WWW_USER=www-數據
    FCGI_USER=www-數據
    FCGI_GROUP=www-數據
    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 and HTML"
    
    # 如果套件已被刪除,則優雅退出。
    測試-x $DAEMON ||出口0
    測試-x $FCGI_SPAWN_GRAPH ||出口0
    測試-x $FCGI_SPAWN_HTML ||出口0
    
    開始() {
      $DAEMON -s $FCGI_GRAPH_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_GRAPH $FCGI_SPAWN_GRAPH 2> /dev/null || echo“圖表已經運行”
      $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 已經運行"
    }
    
    停止() {
      殺死 -QUIT `cat $PIDFILE_GRAPH` || echo“圖表未運行”
      殺死 -QUIT `cat $PIDFILE_HTML` || echo“HTML 未運行”
    }
    
    重新開始() {
      殺死 -HUP `cat $PIDFILE_GRAPH` || echo“無法重新載入圖表”
      殺死 -HUP `cat $PIDFILE_HTML` || echo "無法重新載入 HTML"
    }
    
    案例“$1”
      開始)
        echo“開始$DESC:”
        開始
      ;;
      停止)
        echo "停止 $DESC: "
        停止
      ;;
      重新啟動|重新載入)
        echo“重新啟動$DESC:”
        停止
        # 一秒鐘可能不足以讓守護程式停止,
        # 如果發生這種情況,d_start 將失敗(並且 dpkg 將中斷,如果
        # 軟體包正在升級)。如果需要,更改超時
        # be,或更改 d_stop 以使 start-stop-daemon 使用 --retry。
        # 請注意,使用 --retry 會稍微減慢關閉過程。
        睡覺 1
        開始
      ;;
      *)
        echo "用法: $SCRIPTNAME {start|stop|restart|reload}" >&2
        3號出口
      ;;
    埃薩克
    
    退出$?
    

    /etc/init.d/munin-fcgi在具有權限的情況下安裝以上內容755

  • 在您的虛擬主機中,例如/etc/nginx/conf.d/example.com.conf,將其新增至server { }區塊中。您可以變更允許的 IP 區塊以適合您的設定。我在本地伺服器上執行此操作,並希望 munin 圖僅在本地可用。

    位置/穆寧{
    # 別名 /var/cache/munin/www;
        索引index.html;
    # 包含/etc/nginx/php.conf;
    # 訪問日誌關閉;
        允許 127.0.0.1;
        允許 192.168.0.0/16;
        否認一切;                                
    }
    
    地點 ^~ /munin-cgi/munin-cgi-graph/ {
    # if ($uri ~ /munin-cgi/munin-cgi-graph/([^/]*)) { 設定 $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;
    }
    位置 ^~ /munin-cgi/munin-cgi-html/ {
    # if ($uri ~ /munin-cgi/munin-cgi-html/([^/]*)) { 設定 $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;
    }
    

  • 啟動/etc/init.d/munin-fcgi start並重新載入 nginx,然後就可以開始了。
  • ps 我確實將 munin 的 html 資料夾連結到我的虛擬主機的資料夾:ln -s /var/cache/munin/www/ /var/www/example.com/munin -v

    答案2

    這聽起來像是 中的定義有問題static/dynazoom.html。在我們的安裝中,我們有

    form.cgiurl_graph.value = qs.get("cgiurl_graph", "/munin-cgi/munin-cgi-graph");
    

    我懷疑你有

    form.cgiurl_graph.value = qs.get("cgiurl_graph", "/usr/share/munin/cgi/munin-cgi-graph");
    

    雖然應該是

    form.cgiurl_graph.value = qs.get("cgiurl_graph", "/cgi-bin/munin-cgi-graph");
    

    我仍然相信這大概就是問題所在。只要縮放圖的請求以/cgi-bin/munin-cgi-graph.我不知道從哪裡來/data/munin/...

    嘗試在可以監視瀏覽器(fiddler、chrome 開發工具)發送的請求的環境中運行,並查看真正發送的內容。

    您確定您正在編輯正確的 dynazoom 副本嗎?嘗試進行一個微小的可見更改來驗證這一點。

    答案3

    我在 ubuntu 12.04 和 munin 2.0.21 上遇到了類似的問題。
    檢查 dynazoom 試圖在哪裡找到 munin-cgi-graph。
    穆寧的維基說你應該要配置你的 nginx fcgi-graph

    location ^~ /cgi-bin/munin-cgi-graph/
    

    就我而言,當我使用 Chrome 開發工具(「網路」標籤)檢查頁面時,我發現 dynazoom 試圖從以下位置取得 munin-cgi-graph:/munin-cgi/munin-cgi-graph/不是來自/cgi-bin/munin-cgi-graph/它得到 404 錯誤而不是圖表

    所以我只是在 nginx 配置中更改了這個位置:

        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;
     }
    

    看起來您也有相同的問題,您的 munin-cgi-graph 位置不正確,因此瀏覽器請求將root /data/munin按照錯誤提示進行。

    答案4

    我想在這次談話中添加一些內容。來自 the_architecht 的資訊非常寶貴,但至少對我來說缺少一些東西。


    這裡使用 CentOS 6.8:

    -

    1)CGI檔案的路徑改變了,可以透過locate找到這些路徑:

    /var/www/cgi-bin/munin-cgi-graph
    /var/www/cgi-bin/munin-cgi-html
    

    我必須在啟動腳本中逐行比較位置並分解守護程式啟動行以查看出了什麼問題,這讓我可以追蹤檔案路徑差異。

    -

    2)日誌的權限被設定為「munin」用戶,這導致了某種無聲錯誤。為了解決這個問題,我將 www-data 使用者加入 munin 群組並 chmod 664 日誌檔案:

    -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
    

    文件權限的放棄涉及穆寧維基在spawn-fcgi進程啟動和strace -s1024的末尾添加-n,這給出了錯誤

    write(2, "[2017 年4 月27 日星期四21:47:35] munin-cgi-html:無法在/usr/share/ 開啟/var/log/munin/munin-cgi-html.log(權限被拒絕) perl5/vendor_perl/Log/Log4perl/Appender/File.pm 第103 行。 /munin/munin -cgi-html.log(權限被拒絕)位於 /usr/share/perl5/vendor_perl/Log/Log4perl/Appender/File.pm 第 103 行。


    我的最終 Nginx 和 spawn-fcgi 的修改如下:

    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 $?
    

    相關內容