サーバで動かしている POPFile が落ちてしまうので自動的に復旧する

2018年2月25日

この記事は最初の投稿日から17年経過しています。内容が古い可能性があります。

POPFile をメールサーバ側で運用する1つの方法で書いた際、

2ユーザ分ほど起動してみたのですが、今のところは*ほぼ*快調です。
*ほぼ*というのは、片方のユーザで、たまに POPFile が落ちてしまっているからです。
Nagios で POPFile のポートを監視しているので、落ちたことはわかるのですが、今のところ原因不明です。

POPFile をメールサーバ側で運用する1つの方法

となっていましたが、未だ原因わからずままのため、対処療法を施すことにしました。

Nagios で監視し、落ちていたら自動的に起動するようにします。

基本方針

Nagios では問題発生時に連絡するためにメール発信のコマンドやページャの呼び出しコマンドなどを記述することができますが、これを使って自動復旧を行ってみます。

復旧用シェルスクリプトを作成

他でも使えるように、引数を受け取ってそれによって復旧用コマンドを切り替えるようにしています。

$NAGIOSHOME/ubin/recovery.sh
#!/bin/sh
if [ $1 != 'OK' ]; then
case $2 in
POPFile)
/usr/bin/sudo /bin/su - fwdfoo -c /home/fwdfoo/.popfile/popfile.sh > /dev/null 2>&1
;;
*)
echo no such service.
;;
esac
fi

Nagios は、ユーザ nagios で動作しているため、パスワードなしで su を使った他ユーザでのコマンド起動が行えません。そこで、sudo を使って起動できるように登録してあります。

1つめの引数が Nagios のステータス(OK、CRITICAL、WARNING等)です。 OK の場合には、何もしません。

2つめが起動するサービスです。Nagios 側の service_description と同じものを指定します。

Nagios の定義

アラートを上げる時に、上記のシェルスクリプトを起動するようにします。

以下、$NAGIOSHOME は、Nagios のベースディレクトリに書き換えてください。

たとえば、/usr/local/nagios など。

$NAGIOSHOME/etc/misccommands.cfg

上記のシェルスクリプトを呼び出すコマンドの定義です。

# auto recovery
define command{
command_name    auto-recovery
command_line    $NAGIOSHOME/ubin/recovery.sh $SERVICESTATE$ $SERVICEDESC$
}

1つめの引数で、Nagios のステータス、2つめの引数で service_description を渡しています。

$NAGIOSHOME/etc/contacts.cfg

上記で定義したコマンド(auto-recovery)を呼び出すコンタクト先を定義します。

define contact{
contact_name                    recovery
alias                           Auto Recovery
service_notification_period     24x7
host_notification_period        24x7
service_notification_options    w,u,c,r
host_notification_options       d,u,r
service_notification_commands   auto-recovery
host_notification_commands      host-notify-by-email
email                           root
}
$NAGIOSHOME/etc/contactgroups.cfg

上記のコンタクト先を含むグループを定義します。

define contactgroup{
contactgroup_name       recovery
alias                   Administrators
members                 user1,user2,recovery
}

通常使っているコンタクトグループに追加してもよかったのですが、とりあえず。

$NAGIOSHOME/etc/services.cfg

POPFile を監視しているサービスのコンタクトグループを上記で定義したグループ(recovery)に変更します。

define service{
use                             generic-service
service_description             POPFile
check_command                   check_popfile
contact_groups                  recovery
}
以上で完了

nagios -v nagios.cfg で定義に間違いがないかどうか確認後、nagios のプロセスに HUP シグナルを送って再読込させます。

テスト

手動で POPFile を落とし、しばらく待つと Nagios の PROBLEM alert が飛んできます。

またしばらく待つと、 RECOVERY alert が飛んできました。

うまくいっているようです。

gentoo,monitoring

Posted by toshyon