タグ・アーカイブ: munin

どうしてもApacheをインストールできない環境にmuninをインストールしたい場合でも、普通にmuninをインストールすることができる。(yumでrpmforgeをenableにしてインストールして確認した)
確かに依存関係のあるパッケージ一覧にApache(httpd)は出てこなかったしなー。

しかし、 /usr/bin/munin-cron 実行時(muninをインストールした際、自動的に/etc/cron.d/muninで5分に1回実行される)において

cp: cannot create regular file `/var/www/html/munin/style.css': No such file or directory
cp: cannot create regular file `/var/www/html/munin/logo.png': No such file or directory
cp: cannot create regular file `/var/www/html/munin/definitions.html': No such file or directory
Cannot open /var/www/html/munin/localhost/localhost.html at /usr/share/munin/munin-html line 551.

とエラーが出る。よって

# mkdir -p /var/www/html/munin/ ; chown -R munin:munin /var/www

としてやればよい。できあがったコンテンツは、Apacheが動いているサーバにscpなりrsyncなりで転送してあげればちゃんと見ることができる。ただし、最新データを持ってくるためには、閲覧する直前に転送かけてやらなきゃダメですが。

前回のエントリーで作成したスクリプトですが、監視サーバからSSHアクセスしてきたタイミングと、監視対象のVPSサーバのログローテーションのタイミングが重なった場合に、監視サーバのIPアドレスが取得できない(ログから拾えない)ことがあるので、その対策を行いました。

なんで気づいたかっていうと、正しくIPアドレスを取得してmunin-nodeの再起動を行ったときの通知メールは

New munin-server is 123.456.789.012

みたいな件名なのですが、IPアドレスの検出ができなかったときの通知メールは、「New munin-server is」で件名が終わっていて、それでいてmunin-nodeの再起動だけは行われてしまってます。で、munin-node.confには

#allow ^123.456.789.012$
allow ^...$

と書かれてしまっているわけです。ちょっと時間をおけば、また監視サーバのIPアドレスのIPアドレスが取得できるっちゃーできるのですが、データの取りこぼしや、munin-nodeの不要な再起動など、よろしくないことばかりです。

そこで、監視サーバのIPアドレス取得スクリプトの修正。やってることは単純で、まずはログに監視サーバのIPアドレスが1行でも記録されているかどうかを判断するif文を追加し、1行も記録されていなかったら何もせず、1行でも記録されていたら、通常のIPアドレス検出→IPアドレスが変更していた場合の処理へと進むようにしています。

以下、変更後のスクリプトです。

#!/bin/sh
LANG=C

ADMIN=【携帯のメールアドレス】
CONFDIR=/etc/munin/
cd $CONFDIR

CF=munin-node.conf
BAK0=munin-node.conf.BAK0
BAK1=munin-node.conf.BAK1

NOW_IP_ADDR=`sudo egrep "^w{3} [ :0-9]{11} [._[:alnum:]-]+ sshd[[0-9]+]: Accepted publickey for watcher0" /var/log/secure | tail -1 | awk '{print $11}'`
OA=`echo $NOW_IP_ADDR | awk 'BEGIN {FS="."}{print $1}'`
OB=`echo $NOW_IP_ADDR | awk 'BEGIN {FS="."}{print $2}'`
OC=`echo $NOW_IP_ADDR | awk 'BEGIN {FS="."}{print $3}'`
OD=`echo $NOW_IP_ADDR | awk 'BEGIN {FS="."}{print $4}'`

ACCEPTED_IP=`tail -1 $CF | sed -e 's/allow ^//' | sed -e 's/\//g' | sed -e 's/$//'`

if [ 0 -eq `egrep "^w{3} [ :0-9]{11} [._[:alnum:]-]+ sshd[[0-9]+]: Accepted publickey for watcher0" /var/log/secure | wc -l` ];
    then
        :
    else
        if [ $NOW_IP_ADDR = $ACCEPTED_IP ];
            then
                :
            else
                # Change config
                if [ -f $BAK1 ];
                    then
                        rm -f $BAK1
                fi
                if [ -f $BAK0 ];
                    then
                        mv $BAK0 $BAK1
                fi
                if [ -f $CF ];
                    then
                        cp -p $CF $BAK0
                fi
                sed -i '$s/^allow/#allow/' $CF
                echo allow ^$OA.$OB.$OC.$OD$ >> $CF
                sudo /etc/init.d/munin-node restart
                echo "`date` munin-node restarted" | mail -s "New munin-server is $NOW_IP_ADDR" $ADMIN
        fi
fi

毎度毎度へっぽこスクリプトでごめんなさい。。。

リアル引越しを機に、nullpopopoのサーバを自宅からVPSへ移行したのはいいのですが、外部からの監視をどうしようかとずっと思案してたのです。珠玉のエロ画像を保存しているsambaサーバには、すでにmuninがインストールされているので、こいつを使って監視できないかなー・・・と。

VPSのほうは、当然のことながらIPアドレスは固定なので、監視サーバ側のmunin.confの記述は非常に楽です。問題はVPSのサーバに munin-nodeをインストールして、munin-node.confにどうやって監視サーバのIPアドレスを自動的に書いてやるか・・・です。そこでピコーンと閃いたのは、

「そうだ、監視サーバからsshでログインして、それを契機にIPアドレスを取得しよう!」

という案です。おまけに、ログインした後はIPアドレスの通知スクリプトだけ動かすようにしてやれば、VPSサーバのほうでcronの設定などしなくていいし、いいことづくめかも。なお、TCPの4949番ポートは、あらかじめiptablesですべてのIPアドレスに対して穴をあけておきます。

それでは作業手順です。

■■ VPSサーバにmunin-nodeインストール

[root@nullpopopo ~]# yum --enablerepo=rpmforge install munin-node
(中略)
Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 munin-node              noarch     1.2.5-1.el4.rf   rpmforge          142 k
Installing for dependencies:
 perl-Crypt-DES          x86_64     2.05-3.2.el4.rf  rpmforge           19 k
 perl-Net-SNMP           noarch     5.2.0-1.2.el4.rf  rpmforge           95 k
 perl-Net-Server         noarch     0.97-1.el4.rf    rpmforge          154 k

Transaction Summary
=============================================================================
Install      4 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 410 k
Is this ok [y/N]: y

■■ 基本設定

[root@nullpopopo ~]# cd /etc/munin/
[root@nullpopopo munin]# cp -p munin-node.conf munin-node.conf.orig
[root@nullpopopo munin]# vi munin-node.conf

最終行のここを
allow ^127.0.0.1$

こうする
allow ^127.0.0.1$
##### 以下は実運用後の手動編集禁止
allow ^123.456.789.012$ ← まずは、今の自宅のグローバルIPアドレスを記述する

※ 追記する2行は、configの最終行で、かつ、空行を付け加えないこと。

■■ プラグインの設定

■ 余計なプラグインの削除

[root@nullpopopo munin]# cd plugins/
[root@nullpopopo plugins]# rm -f df_inode entropy open_files open_inodes sendmail_mailqueue sendmail_mailstats sendmail_mailtraffic swap

※ nullpopopoのサーバはMTAがqmailなので、sendmailの項目は削除しました。あと、VPSにはswapがないので、swapの項目も削除します。

■ イーサネットインターフェイスの項目追加

[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/if_ if_venet0:0

※ インターフェイスの名前は、ifconfigコマンドで確認しましょう。

■ プロセス監視項目追加

・ drweb
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/ps_ ps_drweb

・ httpsd
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/ps_ ps_httpsd

・ httpd
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/ps_ ps_httpd

・ couriertcpd
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/ps_ ps_couriertcpd

・ qmail-send
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/ps_ ps_qmail-send

・ mailman
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/ps_ ps_mailman

・ sshd
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/ps_ ps_sshd

・ monit
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/ps_ ps_monit

・ named
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/ps_ ps_named

・ xinetd
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/ps_ ps_xinetd

・ mysqld
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/ps_ ps_mysqld

・ mysql_bytes
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/mysql_bytes mysql_bytes

・ mysql_queries
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/mysql_queries mysql_queries

・ mysql_slowqueries
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/mysql_slowqueries mysql_slowqueries

・ mysql_threads
[root@nullpopopo plugins]# ln -s /usr/share/munin/plugins/mysql_threads mysql_threads

■■ MySQLの環境変数追加

munin-nodeがmysqladminを実行できるよう、ユーザ名とパスワード、そしてmysqladminのパスを記述します。

[root@nullpopopo plugins]# vi ../plugin-conf.d/munin-node

ここを
[mysql*]
#env.mysqlopts -u someuser

こうする
[mysql*]
#env.mysqlopts -u someuser
env.mysqlopts -u admin -p[パスワード]
env.mysqladmin /usr/bin/mysqladmin

※ -pとパスワードとの間には、スペースをあけません。

■■ 監視サーバ側設定

[oresama@intra-server munin]$ sudo cp -p munin.conf munin.conf.20080529
[oresama@intra-server munin]$ sudo vi munin.conf

以下を追記
[nullpopopo.bizcube.info]
    address 121.50.42.188 ← VPSサーバのIPアドレス
    use_node_name yes

■■ munin-node起動

■ 自動起動設定

[root@nullpopopo plugins]# chkconfig munin-node --list
munin-node      0:off   1:off   2:off   3:off   4:off   5:off   6:off

[root@nullpopopo plugins]# chkconfig munin-node on

[root@nullpopopo plugins]# chkconfig munin-node --list
munin-node      0:off   1:off   2:on    3:on    4:on    5:on    6:off

■ 起動

[root@nullpopopo plugins]# /etc/init.d/munin-node start
Starting Munin Node:                                       [  OK  ]

■■ IPアドレス通知の環境を構築する

■ VPS側でサービス監視用