雑多なインフラエンジニア日記

技術ブログでっす~

munin AmazonLinuxにインストール

munin2.0.1をAmazonLinuxにインストールしたのでメモ。
(Apacheインストール&muninユーザ、グループは事前に作成している前提)

munin本体


1. muninのtarballをゲット

・配布元
http://sourceforge.net/projects/munin/files/stable/


2. yum で muninに必要なrpm群をダウンロード
(CPANめんどくさい。muninはあくまでソースからw)

yum install --downloadonly --downloaddir=`pwd` munin


3. rpmをインストール(perlのモジュールたち)

rm -f munin*
rpm -Uvh ./*rpm


4. tarball展開

tar xfz munin-2.0.1.tar.gz
cd munin-2.0.1


5. Makefile.config を修正 (お好みで)

PREFIX = /usr/local/munin-2.0.1
CONFDIR = $(PREFIX)/etc
DBDIR = $(PREFIX)/var
LOGDIR = /var/log/munin
STATEDIR = /var/run/munin


6. make&make install

・エラーが出たらperlモジュールが足りない可能性があります。
make && make install


7. Web周りの権限変更 (やらないとグラフが更新されないはずです)

cd /usr/local
ln -s munin munin-2.0.1
chown -R munin:apache /usr/local/munin/var
chown -R munin:apache /usr/local/munin/www
chown -R munin:apache /var/log/munin
chmod -R 775 /usr/local/munin/var
chmod -R 775 /usr/local/munin/www
chown -R 775 /var/log/munin


8. munin.conf 修正

# apachefcgi入れたほうが良い
graph_strategy cgi
html_strategy cgi

# CPUのCore数,またはCore数*2くらいが目安(運用しながら調整)
max_processes 2

# a simple host tree (監視対象ノード)
[node01]
address 10.0.0.4
[node02]
address 10.0.0.5

上3つの設定はパフォーマンス(CPU)に関わってくるので、
環境に合わせて下さい。
max_processesは増やすと、情報収集時間は早くなりますが、CPU負荷が
一時的(cronの5分おき)に高くなるので、運用しながら調整して下さい。

9. cron設定
(5分おきにポーリングし、muni-nodeの情報収集&グラフ更新)

crontab -e -u munin

# Munin Server
*/5 * * * * /usr/local/munin/bin/munin-cron 2>&1



監視対象ノード


1. Makefile.config を修正 までは本体と同じ手順。

2. make&make install

make
make install-common-prime install-node-prime install-plugins-prime


3. plugin を自動で配置

/usr/local/munin/sbin/munin-node-configure --shell --families auto,manual,contrib \
| sh -x

ちなみに、このコマンドはサーバの状況を判断して自動で/usr/local/munin/etc
/plugins/に、pluginを設置してくれます。(eth2があればeth2のplugin設置など)
過不足はあるので、要らないものは削除、足りないものはググって設置
して下さい。
githubなどに色々公開されていますし、自作も可能です。

4. munin-node.conf 修正

host_name node01
allow ^10\.0\.0\.100$

allowは、監視サーバ(munin本体)のIPアドレスを設定して下さい。
あとはデフォルトで動くはずです。

5.起動スクリプト設置 (tarballの中にあった気がする・・・)

#! /bin/sh
#
# munin-node    Control the Munin Node Server (formerly Linpro RRD client)
#
# chkconfig: 2345 90 10
# description: munin node agents
# processname: munin-node
# config: /etc/munin/munin-node.conf
# pidfile: /var/run/munin/munin-node.pid

# Source function library.
. /etc/rc.d/init.d/functions

RETVAL=0
PROCNAME=munin-node

mkdir -p /var/run/munin 2>/dev/null
#chown munin /var/run/munin

# See how we were called.
case "$1" in
   start)
        echo -n "Starting Munin Node: "
         #/usr/sbin/munin-node &
         /usr/local/munin/sbin/munin-node &
         sleep 1
         pkill -0 $PROCNAME
         RETVAL=$?
         if [ $RETVAL -eq 0 ]
        then
                echo_success
                touch /var/lock/subsys/munin-node
        else
                echo_failure
        fi
        echo
        ;;
  stop)
        echo -n "Stopping Munin Node agents: "
        kill $(cat /var/run/munin/munin-node.pid)
        RETVAL=$?
        if [ $RETVAL -eq 0 ]
        then
                echo_success
                rm -f /var/lock/subsys/munin-node
        else
                echo_failure
        fi
        echo
        ;;
  status)
        status $PROCNAME
        RETVAL=$?
        ;;
  restart|reload)
        $0 stop
        $0 start
        RETVAL=$?
        ;;
  *)
        echo "Usage: munin-node {start|stop|status|restart}"
        exit 1
esac

exit $RETVAL


6. munin-node起動

/etc/init.d/munin-node start
ps -ef|grep munin
netstat -nap|grep 4949


これで、5分おきの本体からのポーリングで情報を収集してくれます。
本体側の /usr/local/munin/var、 /usr/local/munin/www 配下が更新
されている事を確認して下さい。
更新されていない場合、munin-update.log、munin-html.log、apacheのログ
にエラーが吐かれているはずですので、適宜対処して下さい。
経験から言うと、ディレクトリ、ファイルの権限不足、perlモジュール不足
がほとんどです。

Apache設定


1. Apacheはひとまず、以下でOKだと思います。
(NameVirtual&Bassic認証)

Listen 80
<VirtualHost *:80>

    ServerName ドメイン名など
    DocumentRoot "/usr/local/munin/www/docs"
    ErrorLog "/usr/local/httpd/logs/munin-error.log"
    CustomLog "/usr/local/httpd/logs/munin-access.log" combined

    Alias /munin/ "/usr/local/munin/www/docs/"
    <Directory "/usr/local/munin/www/docs/">
       AllowOverride None
       Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
       Order allow,deny
       Allow from all
       AuthName "Access"
       AuthType Basic
       AuthUserFile /usr/local/munin/etc/munin.htpasswd
       Require valid-user
    </Directory>

    ScriptAlias /cgi-bin/ /usr/local/munin/www/cgi/
    <Directory /usr/local/munin/www/cgi/>
       AllowOverride None
       Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
       Order allow,deny
       Allow from all
    </Directory>
    
</VirtualHost>

Apache起動後に作成されるファイル、ディレクトリがあるので、念のため、
findなどで確認し、「7. Web周りの権限変更」をして下さい。

あとは、http://ドメイン名 でアクセスすると、muninの監視画面が表示されます。


今回ははしょりましたが、情報収集、グラフ更新で一瞬CPUを喰うので、
max_processes を変更して様子見して下さい。
Nagiosでmunin本体のCPU監視してますが、タイミングが悪いとアラート飛びまくり
ます。。

max_processes 16 → 2 にしたら治まりましたが、副作用として情報収集&更新に
時間が掛かるので、ここはどちらかを取るかですね。
あとは、取得するグラフ数を減らしたりしても良いですね。
世の中的にはiowaitでCPUを喰うようですが、うちはuserでCPUを喰ってます。

あと、グラフ更新がCGIなので、監視画面にアクセスするとCPUがはねます。。
私の環境ではサーバ1台の全グラフ表示に、45secも掛かっているのでfcgiを今後
入れます。

・補足
Webフロントにnginxを使ったことがありますが、正直文献も少ないし面倒です。
spwan-cgiとか入れるのが大変でした。
設定もトライ&エラーで何とか動かしましたが、Apacheのほうが断然楽です。

・参考
http://d.hatena.ne.jp/rx7/20130308/p2
http://munin-monitoring.org/wiki/CgiHowto2
http://munin-monitoring.org/wiki/CgiHowto
http://pocketstudio.jp/log3/2012/02/09/how_to_use_munin-cgi-graph/
http://www.glidenote.com/archives/1054

以上です。