はじめに
- どうしても落とせない
td-agent
をmonit
で監視することにした td-agent
は今までほとんど落ちたことは無いが転ばぬ先の杖- ちなみに
monit
と似たツールとしてはsupervisor
がある(まだあるかも) - 両方使ってみたけど個人的な主観だけどマジ似てる(プロセスの監視方法や WebUI があったりする点)
参考
設定
Debian の場合
環境は Debian 7.2 を利用。Docker
コンテナだけど。
インストール
apt-get
でサクッとインストール。
sudo apt-get install monit
インストールされるバージョンは下記の通り。
This is Monit version 5.4 Copyright (C) 2001-2012 Tildeslash Ltd. All Rights Reserved.
設定
monitrc
を以下のように書く。
set daemon 30 set logfile /var/log/monit.log set idfile /var/lib/monit/id set statefile /var/lib/monit/state set eventqueue basedir /var/lib/monit/events slots 100 include /etc/monit/conf.d/*
/etc/monit/conf.d/td-agent.conf
を以下のように設置。
check process tdagent with pidfile "/var/run/td-agent/td-agent.pid" start program = "/etc/init.d/td-agent start" stop program = "/etc/init.d/td-agent stop" if 5 restarts within 5 cycles then timeout
/etc/init.d/monit restart
で早速起動。冗長出出力モード(-vv)で起動すると以下のように出力される。
Control file = /etc/monit/monitrc Log file = /var/log/monit.log Pid file = /var/run/monit.pid Id file = /var/lib/monit/id Debug = True Log = True Use syslog = False Is Daemon = True Use process engine = True Poll time = 30 seconds with start delay 0 seconds Expect buffer = 256 bytes Event queue = base directory /var/lib/monit/events with 100 slots Mail from = (not defined) Mail subject = (not defined) Mail message = (not defined) Start monit httpd = False The service list contains the following entries: Process Name = tdagent Pid file = /var/run/td-agent/td-agent.pid Monitoring mode = active Start program = '/etc/init.d/td-agent start' timeout 30 second(s) Stop program = '/etc/init.d/td-agent stop' timeout 30 second(s) Existence = if does not exist 1 times within 1 cycle(s) then restart else if succeeded 1 times within 1 cycle(s) then alert Pid = if changed 1 times within 1 cycle(s) then alert Ppid = if changed 1 times within 1 cycle(s) then alert Timeout = If restarted 5 times within 5 cycle(s) then unmonitor System Name = system_8d2124a9a59d Monitoring mode = active
ほうほう。
テスト
td-agent
が動いてますね。
root@8d2124a9a59d:/etc/monit# ps ax | grep td-agent 987 ? Sl 0:00 /usr/lib/fluent/ruby/bin/ruby /usr/sbin/td-agent --daemon /var/run/td-agent/td-agent.pid --log /var/log/td-agent/td-agent.log 990 ? Sl 0:00 /usr/lib/fluent/ruby/bin/ruby /usr/sbin/td-agent --daemon /var/run/td-agent/td-agent.pid --log /var/log/td-agent/td-agent.log
td-agent
止めまーす。
root@8d2124a9a59d:/etc/monit# /etc/init.d/td-agent stop [ ok ] Stopping td-agent: td-agent.
30 秒程待ちまーす。(この時間は monitrc
の set daemon
パラメータで設定)
root@8d2124a9a59d:/etc/monit# ps ax | grep td-agent 1066 ? Sl 0:00 /usr/lib/fluent/ruby/bin/ruby /usr/sbin/td-agent --daemon /var/run/td-agent/td-agent.pid --log /var/log/td-agent/td-agent.log 1069 ? Sl 0:00 /usr/lib/fluent/ruby/bin/ruby /usr/sbin/td-agent --daemon /var/run/td-agent/td-agent.pid --log /var/log/td-agent/td-agent.log
はい。立ち上がっております。念の為にログも確認してみる。
[JST Dec 14 08:33:53] info : Starting monit daemon [JST Dec 14 08:33:53] info : 'system_8d2124a9a59d' Monit started [JST Dec 14 08:34:53] error : 'tdagent' process is not running [JST Dec 14 08:34:53] info : 'tdagent' trying to restart [JST Dec 14 08:34:53] info : 'tdagent' start: /etc/init.d/td-agent [JST Dec 14 08:35:24] info : 'tdagent' process is running with pid 987 [JST Dec 14 08:38:24] error : 'tdagent' process is not running [JST Dec 14 08:38:24] info : 'tdagent' trying to restart [JST Dec 14 08:38:24] info : 'tdagent' start: /etc/init.d/td-agent [JST Dec 14 08:38:56] info : 'tdagent' process is running with pid 1066
おお、素晴らしい。
最後に
monit
の設定とっても簡単- ちゃんと設定すればメールとか飛ばせたりするので嬉しい
Debian
のセットアップ(Debian
でもWheezy
とSquueze
でバージョン違うので注意)とCentOS
でセットアップでちょっと違うので注意- あとで
CentOS
のセットアップについても追記する - でも簡単にプロセスの監視と再起動が出来たりするのは嬉しい