プロセス監視

したくなちゃった♥

daemontoolsとかよく聞くけど、「Monit」と「Growl for Windows」と「Perl」と「Gmail」で組みました。(無駄に多い)
監視対象はほぼ24時間稼動のUbuntuのPC内で動いているPerlプログラム。

monitrcは↓のような感じ

set daemon 60 # 60秒おきに監視
set logfile syslog facility log_daemon
set mailserver smtp.gmail.com port 465 username "hoge@gmail.com" password "hoge" using SSLV3

set mail-format {
from: hoge@monit
subject: $HOST : $SERVICE - $EVENT
message: Monit
ACTION: $ACTION
$DESCRIPTION
at $DATE on $HOST.
}

set alert hoge@gmail.com

include /home/hoge/conf.d/*.conf

*.conf↓

check file tekito-na-program /home/hoge/pid/tekito-na-log
start = "/home/hoge/perl5/perlbrew/perls/perl-5.14.1/bin/perl /home/hoge/hoge.pl"
stop  = "/bin/bash -c 'kill `head -n 1 /home/hoge/pid/tekito-na-log`'"
if timestamp > 10 minutes then restart

という感じで書くと予期していた動きをしてくれました。

tekito-na-log には先頭行にプロセスID(hoge.plから書き込まれる)があって、先頭行以降はhoge.plからタイムスタンプが押されるファイルです。

これで10分以上更新されなかったら再起動してhoge@gmail.comにアラートが送られます(たぶん!)。
で、これをWindowsにも通知して欲しいので、GrowlとPerlでやりました。
Gmailのメールを通知するものが既にあるけど、通知するものを細かくフィルタリングしたかったのであえてPerlを使った)

「Growl for Windows」をインストールしてCPANモジュールの「AnyEvent::Gmail::Feed」と「Growl::Any」を組み合わせる(Strawberry Perl for WindowsのCPANを利用した)と↓のような感じでPCの画面の右上にピョコッと通知が出てきました。
(アイコンはリャマで画像検索して出てきたかわいいやつ)
Growl

「AnyEvent::Gmail::Feed」と「Growl::Any」で作ったPerlの通知プログラムはウィンドウが邪魔だったので「sexe」でサービス化しておきました。
(ファイルをPerlの絶対パス、起動時オプションを通知プログラムのパスにすればおk)

通知見忘れても時間でソートして見れるようでよかった。
Growlのログ

さらにmonitrcをいじるとブラウザで監視プロセス一覧が見れます。
Monit

同じような処理をcronでやってたけど、cronでやるより少し楽って感じです。
cronより細かく通知できるし見た目がイイ!
こういう方面は詳しくないんやけど、プロセス監視はこんな感じでいいんかな?

コメントをどうぞ

コメント以外は入力しなくても送信できます。
間違っている情報に対する突っ込みなども歓迎です。

トラックバックURL