ロードアベレージを監視して任意のコマンドを実行する(monitで)

他に似たツールがあれば教えて欲しいです

ロードアベレージを監視して任意のコマンドを実行するコマンド - blog.nomadscafe.jp

いままで使ったことはなかったのですが、monit でできるはず、と思って実験。一般的には、負荷が上がったりプロセスが応答しなくなったら再起動、のような用途に使うツールです。

# /etc/monit/monitrc
check system localhost
  start program = "/path/to/command"
  if loadavg (1min) > 2 then start

[追記] exec を使うほうがよいとのご指摘をコメントでいただきました。

check system localhost
  if loadavg (1min) > 2 then exec "/path/to/command"

これでロードアベレージの1分平均が2を超えた場合に /path/to/command が実行されます。

ログはこんな感じで出ました。

[JST Jul 26 15:48:00] error    : 'localhost' loadavg(1min) of 2.4 matches resource limit [loadavg(1min)>2]
[JST Jul 26 15:48:00] info     : 'localhost' start: /path/to/command

トリガにするものはロードアベレージ以外にも、CPUやメモリ、ディスクの使用率、ファイルのサイズやタイムスタンプ、属性、TCPのポートに反応があるかなど。いろいろなものが使えます。

組み込みの Web UI もあって、状態をブラウザで見たり監視を止めたりもできると。 http://mmonit.com/monit/screenshots/

なかなか便利そうですね。