CentOS6にmuninをインストールしnginxで表示する – グラフの動的生成もするよ!


nullpopopo96x96CentOS6にmuninをインストールして、nginxで表示する設定をやってみました。本稿執筆時点で epel リポジトリにある munin は2.0.16 なので、ブラウザからグラフをズームすることができます。今回はさくらのVPS 2G (CentOS 6.4 x86_64) にすべてのパッケージをyumでインストールして設定してみました。

 

※ 2014/04/16 追記: 最新版のもっと楽な手順をこちらに書きましたので、検索から来られた方は、まずこちらをご参照いただければ幸いです。

■ パッケージの準備

さくらのVPSはあらかじめ、epel リポジトリが有効になっています。私はepelリポジトリを残していますが無効化していますので、今回の記事中でパッケージをインストールする際は --enablerepo=epel をつけてください。また、前回のエントリを参考に nginx を CentALT リポジトリからインストールする際は、epel リポジトリから先に GeoIP をインストールしておきましょう。nginxオフィシャルの最新パッケージはこちらのリンクから入手できます。

■ munin と spawn-fcgi をインストールする

これらのパッケージはすべて epel リポジトリからインストールします。

[ (っ´∀`)っ@友の会 ~]$ sudo yum --enablerepo=epel install munin munin-node spawn-fcgi

※ CentALTリポジトリからnginxをインストールする場合
[ (っ´∀`)っ@友の会 ~]$ sudo yum --enablerepo=epel install GeoIP munin munin-node spawn-fcgi

■ nginx インストール

※ nginx リポジトリから nginx をインストールする場合
sudo yum --enablerepo=nginx install nginx

※ CentALT リポジトリから nginx をインストールする場合
sudo yum --enablerepo=CentALT install nginx

パッケージのインストールは以上になります。それでは各々の設定を続けましょう。

■ munin の設定

今回、munin の各CGIはUNIXソケット経由でのアクセスとします。また、グラフやhtmlの生成は cron ではなく CGI が行うようにします。

[ (っ´∀`)っ@友の会 ~]$ sudo vi /etc/munin/munin.conf

ここを
graph_strategy cron
↓
こうする
graph_strategy cgi

ここを
html_strategy cron
↓
こうする
html_strategy cgi

あと、最初から「cgiurl_graph /munin/cgi-graph」と設定されていることも確認しておいてください。

■ spawn-fcgi の設定

/var/www/cgi-bin/munin-cgi-graph と /var/www/cgi-bin/munin-cgi-html にソケット経由でアクセスするスタートスクリプト /etc/init.d/munin-fcgi を書きました。ただし本当に手抜きです。

[ (っ´∀`)っ@友の会 ~]$ sudo touch /etc/init.d/munin-fcgi
[ (っ´∀`)っ@友の会 ~]$ sudo chmod 700 /etc/init.d/munin-fcgi
[ (っ´∀`)っ@友の会 ~]$ sudo vi /etc/init.d/munin-fcgi
#!/bin/bash
#
# munin-fcgi        Startup script for munin-fcgi
#
# chkconfig: - 85 15
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
LANG=C

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/spawn-fcgi
SOCK_USER=nginx
FCGI_USER=munin
FCGI_GROUP=munin
CMDPATH=/var/www/cgi-bin
RUNPATH=/var/run/munin
GRAPHCMD=munin-cgi-graph
HTMLCMD=munin-cgi-html

if [ ! -x $DAEMON ]; then
    echo "File not found or is not executable: $DAEMON!"
    exit 0
fi

start(){
    if [ ! -e ${RUNPATH}/${GRAPHCMD}.sock ];
      then
        ${DAEMON} -s ${RUNPATH}/${GRAPHCMD}.sock -U ${SOCK_USER} 
        -u ${FCGI_USER} -g ${FCGI_GROUP} ${CMDPATH}/${GRAPHCMD}
      else
        rm -f ${RUNPATH}/${GRAPHCMD}.sock
        ${DAEMON} -s ${RUNPATH}/${GRAPHCMD}.sock -U ${SOCK_USER} 
        -u ${FCGI_USER} -g ${FCGI_GROUP} ${CMDPATH}/${GRAPHCMD}
    fi
    if [ ! -e ${RUNPATH}/${HTMLCMD}.sock ];
      then
        ${DAEMON} -s ${RUNPATH}/${HTMLCMD}.sock -U ${SOCK_USER} 
        -u ${FCGI_USER} -g ${FCGI_GROUP} ${CMDPATH}/${HTMLCMD}
      else
        rm -f ${RUNPATH}/${HTMLCMD}.sock
        ${DAEMON} -s ${RUNPATH}/${HTMLCMD}.sock -U ${SOCK_USER} 
        -u ${FCGI_USER} -g ${FCGI_GROUP} ${CMDPATH}/${HTMLCMD}
    fi
}

stop(){
    for i in $(ps -aef | egrep "(${GRAPHCMD}$|${HTMLCMD}$)" | awk '{print $2}')
    do
        kill -9 $i
    done
    rm -f ${RUNPATH}/${GRAPHCMD}.sock
    rm -f ${RUNPATH}/${HTMLCMD}.sock
}

case $1 in
  [sS][tT][aA][rR][tT])
    start
    ;;
  [sS][tT][oO][pP])
    stop
    ;;
  [rR][eE][sS][tT][aA][rR][tT])
    stop && start
esac

■ nginx のバーチャルホスト設定

http://munin.example.com/ 直下にアクセスした場合、 http://munin.example.com/munin/ へ飛ばす設定、ベーシック認証、CGIの設定をしてあげます。設定ファイルはこんな感じです。

server {
    listen       80;
    server_name  munin.example.com;

    access_log  /home/vhosts/munin.example.com/logs/access.log  main;
    error_log   /home/vhosts/munin.example.com/logs/error.log;

    auth_basic "admin only";
    auth_basic_user_file /home/vhosts/munin.example.com/.htpasswd;

    location / {
        rewrite ^/$ munin/ redirect; break;
    }

    location ^~ /munin-cgi/munin-cgi-graph/ {
        fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);    
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass unix:/var/run/munin/munin-cgi-graph.sock;
        include fastcgi_params;
    }

    location /munin/static/ {
        alias /etc/munin/static/;
    }

    location /munin/ {
        fastcgi_split_path_info ^(/munin)(.*);
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass unix:/var/run/munin/munin-cgi-html.sock;
        include fastcgi_params;
    }

    error_page  404          /404.html;

    location = /404.html {
        root   /usr/share/nginx/html;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root   /usr/share/nginx/html;
    }
}

こちらを参考にベーシック認証の設定をしてあげて、 /etc/init.d/munin-node 、 /etc/init.d/munin-fcgi 、 /etc/init.d/nginx から各々起動し、chkconfig で自動起動設定しましょう。ブラウザからアクセスし、グラフがズームできればおしまいです。

munin001munin002

munin003munin004

 

※ 参考サイト様

Mos's blog: munin 2.0.x on centos 6 ( rhel 6 ) nginx
MuninのグラフをCGIリアルタイム生成して負荷軽減する方法(munin-cgi-graph) | Pocketstudio.jp log3
munin2で動的にグラフを作成 - ゆるゆると