インフラブログ

とあるWEBサイトのインフラを構築運用するメモ

Monitでインスタンス内のシステムモニタ、プロセス死活監視する

各EC2インスタンスにMonitを導入して、CPU使用率、メモリ空き容量、Disk容量といった数値の監視とプロセスの死活監視を行います。例えば、Disk容量が90%超えを検知したら指定のメールアドレスに送信することもできます。 モニタをグラフで見る機能はないので、それについてはあとで記事にする予定のMuninを導入します。

インストール

$sudo yum install monitで入ります。 設定は/etc/monit.d/以下に.confを配置します。サーバの役割毎に監視したいプロセスなども変わってくるので、役割毎にファイルを分けて用意します。 base.confは全サーバ共通の監視項目、web.confはWEBサーバとしての監視項目、app.confはAPPサーバとしての監視項目・・・と言った具合です。 インスタンスがAPPサーバとして立ち上がった時は、base.confとapp.confを/etc/monit.d/下に配置されるようにします。

設定内容

confの例を書いておきます。こんなことを設定しています。

  • アラートの通知先と文面
  • cpuロードアベレージ、メモリ使用率、ディスク使用率
  • pidの存在でrsyslogdを監視
  • ps -efして"eye monitoring"がマッチするかどうかでeyeを監視
set alert systemalert@watch.example.com but not on { INSTANCE pid } with mail-format { 
  from: monit@$HOST
  subject: $SERVICE $EVENT $HOST
  message: 
Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
}
 
set mailserver localhost  port 25

# System
check system system
group system
if loadavg (1min) > 12 then alert
if loadavg (5min) > 8 then alert
if memory usage > 90% then alert
if swap usage > 25% then alert
if cpu usage (user) > 95% then alert
if cpu usage (system) > 75% then alert
if cpu usage (wait) > 50% then alert

check filesystem rootfs with path /
  if space usage > 80% then alert

# syslogd
check process syslogd with pidfile /var/run/syslogd.pid
 start program = "/etc/init.d/rsyslog start"
 stop program = "/etc/init.d/rsyslog stop"
 if 5 restarts within 5 cycles then timeout
check file syslogd_file with path /var/log/messages

#eye
check process eye matching "eye monitoring"
  start program = "/etc/init.d/eye start"
  stop program = "/etc/init.d/eye stop"
  if 5 restarts within 5 cycles then timeout

monitの死活監視はどうしようとなりますね。upstartで制御というのが良いかもしれません。 参考になる記事