ようへいの日々精進XP

よかろうもん

td-agent を monit で監視する

はじめに

  • どうしても落とせない td-agentmonit で監視することにした
  • 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 秒程待ちまーす。(この時間は monitrcset 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 でも WheezySquueze でバージョン違うので注意)と CentOS でセットアップでちょっと違うので注意
  • あとで CentOS のセットアップについても追記する
  • でも簡単にプロセスの監視と再起動が出来たりするのは嬉しい