[Munin] Ubuntu+Nginx+Munin 拡大グラフが表示されないときの対処方法

この記事は、シリーズ「Muninでサーバー監視」の一部です。( 4 / 4 )

現象

Muninは、グラフをクリックすると拡大操作ができます。
できるはずなのですが、画像が表示されず、以下のようになっていました。

通常のグラフは以下のとおりちゃんと表示されています。

今回この現象を解決することができたので、手順を記します。
手順は書きますが、細かいなどについては調べきれてないところもあるため今回は省いています。ご了承ください。

手順

apt-get

$ sudo apt-get install spawn-fcgi
$ sudo apt-get install libcgi-fast-perl

Nginx設定

/etc/nginx/sites-available/defaultに以下を追記します。

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

スクリプトの設定

スクリプト作成

$ sudo vim /etc/init.d/spawn-fcgi-munin-graph

spawn-fcgi-munin-graphをそのまま持ってくればよいですが、Nginxの設定と併せてNAMEを書き換えます。

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=fcgi-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_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-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

スクリプト権限設定

実行権限を割り当てます。

$ sudo chmod a+x /etc/init.d/spawn-fcgi-munin-graph

起動時のスクリプト実施設定

$ sudo chmod a+x /etc/init.d/spawn-fcgi-munin-graph
$ update-rc.d spawn-fcgi-munin-graph defaults

各ファイルの権限確認

以下のフォルダ・ファイルの所有者・グループがwww-dataになっていることを確認してください。

$ ls -l /var/lib/munin/cgi-tmp
drwxr-xr-x 3 www-data www-data 4096  5月 21 03:13 munin-cgi-graph
$ ls -l /var/log/munin/munin-cgi-graph.log
-rw-rw-r-- 1 www-data www-data 59370  5月 21 03:12 /var/log/munin/munin-cgi-graph.log

もしmuninなどになっている場合、chownコマンドで修正します。

$ sudo chown www-data:www-data /var/lib/munin/cgi-tmp
$ sudo chown www-data:www-data /var/log/munin/munin-cgi-graph.log

再起動して動作確認

マシンを再起動し、アクセスしてみます。

$ sudo reboot

無事、以下のように拡大できるようになりました。

おわりに

動かないときは?

  • Nginxの設定とスクリプトの設定を確認しましょう。
    • ソケットファイルの名前が一致していますか?
    • /var/log/nginx/error.logを確認してみましょう。
  • スクリプトファイルの動作確認をしましょう。
    • sudo /etc/init.d/spawn-fcgi-munin-graph start実行後、グラフは表示されますか?
    • 「起動時のスクリプト実施設定」は正しく行えていますか?

参考URL

Dynamic generation of munin graphs and html / nginx
Munin dynamic graph zoom (dynazoom) not working (Nginx, PHP-FPM) – Stack Exchange
spawn-fcgi-munin-graph

この記事は、シリーズ「Muninでサーバー監視」の一部です。( 4 / 4 )