munin + nginx: 그래프에 다이나줌이 적용되지 않음

munin + nginx: 그래프에 다이나줌이 적용되지 않음

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를 시작합니다
    # 설명: 웹 액세스를 위한 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/
    경로=/usr/local/bin/:/usr/local/sbin:$PATH
    DAEMON=$(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-데이터
    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="그래프 및 HTML용 무닌 FCGI"
    
    # 패키지가 제거된 경우 정상적으로 종료됩니다.
    테스트 -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이 이미 실행 중입니다."
    }
    
    멈추다() {
      kill -QUIT `cat $PIDFILE_GRAPH` || echo "그래프가 실행되지 않습니다"
      kill -QUIT `cat $PIDFILE_HTML` || echo "HTML이 실행되지 않음"
    }
    
    재시작() {
      kill -HUP `cat $PIDFILE_GRAPH` || echo "그래프를 다시 로드할 수 없습니다"
      kill -HUP `cat $PIDFILE_HTML` || echo "HTML을 다시 로드할 수 없습니다"
    }
    
    케이스 "$1" in
      시작)
        echo "$DESC 시작: "
        시작
      ;;
      멈추다)
        echo "$DESC 중지 중: "
        멈추다
      ;;
      다시 시작|다시 로드)
        echo "$DESC 다시 시작하는 중: "
        멈추다
        # 1초는 데몬을 멈추기에 충분한 시간이 아닐 수 있습니다.
        # 이런 일이 발생하면 d_start는 실패합니다. (그리고 다음과 같은 경우 dpkg는 중단됩니다.)
        # 패키지가 업그레이드되고 있습니다). 필요한 경우 시간 초과를 변경하세요.
        # 시작-중지-데몬이 --retry를 사용하도록 d_stop을 변경합니다.
        # --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 그래프를 로컬에서만 사용할 수 있기를 원했습니다.

    위치 /munin {
    # 별칭 /var/cache/munin/www;
        색인 index.html;
    # /etc/nginx/php.conf를 포함합니다;
    # access_log off;
        127.0.0.1을 허용합니다.
        192.168.0.0/16을 허용합니다.
        모두 거부하다;                                
    }
    
    위치 ^~ /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;
        fastcgi_params를 포함합니다;
    }
    위치 ^~ /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;
        fastcgi_params를 포함합니다;
    }
    

  • nginx를 시작 /etc/init.d/munin-fcgi start하고 다시 로드하면 됩니다.
  • ps. munin의 html 폴더를 내 vhost의 폴더에 연결했습니다: 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 dev tools)에서 전송되는 요청을 모니터링하고 실제로 전송되는 내용을 확인할 수 있는 환경에서 실행해 보세요.

    dynazoom의 올바른 사본을 편집하고 있습니까? 이를 확인하기 위해 눈에 보이는 사소한 변경을 시도해 보세요.

    답변3

    munin 2.0.21을 사용하는 우분투 12.04에서도 비슷한 문제가 발생했습니다.
    dynazoom이 munin-cgi-graph를 찾으려고 하는 위치를 확인하세요.
    무닌의 위키에 따르면nginx fcgi-graph를 구성해야 합니다.

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

    내 경우에는 Chrome 개발자 도구(네트워크 탭)를 사용하여 페이지를 검사할 때 dynazoom이 다음에서 munin-cgi-graph를 가져오려고 하는 것을 발견했습니다./munin-cgi/munin-cgi-graph/출신이 아닌/cgi-빈/munin-cgi-그래프/그래프 대신 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 파일의 경로는 다음을 통해 찾을 수 있습니다.

    /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 프로세스 시작 끝에 -n을 추가하고 strace -s1024를 추가하면 오류가 발생합니다.

    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.\n", 180[2017년 4월 27일 목요일 21:47:35] munin-cgi-html: /var/log/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 $?
    

    관련 정보