読者です 読者をやめる 読者になる 読者になる

Studio3104::BLOG.new

uninitialized constant Studio3104 (NameError)

FluentdのpingメッセージをNagiosで監視


Fluentdの監視については、
Fluentd Meetup #2 @外道父 Fluentdを優しく見守る監視事例や、
#fluentdの死活監視を ping message + ping message checker で - tagomorisのメモ置き場がとても参考になります。

これらの情報を大いに参考にさせていただいて構成した環境の監視設定についてまとめます。

当方環境

・各APPサーバなどからはfluent-agent-liteによってログとping messageが送られてくる
・受信側のFluentdサーバはシングルノード、シングルプロセス
・APPサーバ、Fluentdサーバ、Nagiosサーバはそれぞれ別のサーバ

監視方針

監視はなるべくシンプルにしたいので、こんな感じにしています。
TCP/UDPポート監視
・プロセス監視はしない
・通知はNagiosから

プロセス監視をしないのは、ポート監視で十分条件は満たしているし、td-agentのプロセス重複起動問題も現在のバージョンでは修正されているからです。
また、ping_message_checkerによってメッセージがしっかりと送られてきていることを確認出来るので、flowcounterを併用した確認もしていません。*1

当方環境では監視にNagiosを使っています。
out_ikachanやout_mailなどは使わず、ping_message_checkerによってemitされた情報をファイルに書き出し、そのファイルをcheck_log3で監視します。

送信側の設定

fluent-agent-liteの場合、バージョン0.5からping messageの出力が出来るようになりました。
以下のような設定を入れます。

/etc/fluent-agent-lite.conf(一部)

PING_TAG=ping
PING_DATA=`hostname`
PING_INTERVAL=60

Fluentdをお使いの場合は、こんな感じで。

<source>
  type ping_message
  tag ping
  data NODENAME
</source>
<match ping>
  type forward
  flush_interval 15s
  host logserver
</match>

受信側の設定

このように設定しておきます。
これにより、一度ping messageが届いたあと3600秒(デフォルト値)の間に再度同じ種類のping messageが届かなかった場合に、アラートメッセージが/var/log/fluentd/missing.ping.logに吐き出されます。
デフォルトでは3回分のアラートメッセージがファイルに吐き出されますが、1回でよい場合はping_message_checkerの設定で「notification_times 1」としてあげればよいです。

<match ping.**>
  type copy
  <store>
    type ping_message_checker
    tag missing.ping
    notifications yes
  </store>
  <store>
    type file_alternative
    path /var/log/fluentd/ping.%Y%m.log
    flush_interval 1s
    localtime
    output_include_time true
    output_include_tag false
    output_data_type attr:data
  </store>
</match>
<match missing.ping>
  type file_alternative
  path /var/log/fluentd/missing.ping.log*
  time_slice_format
  flush_interval 1s
  output_include_time true
  output_include_tag false
  output_data_type attr:data
</match>

Nagios設定

監視設定を入れていきます。
Nagios標準のcheck_logプラグインは少しおバカさんなので*2check_log3.pl - Nagios Exchangeを代わりに使います。

実際のNagiosの設定です。

etc/objects/commands.cfg

define command{
  command_name  check_tcp
  command_line  $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ -w $ARG2$ -c  $ARG3$
  }

define command{
  command_name  check_udp
  command_line  $USER1$/check_udp -H $HOSTADDRESS$ -p $ARG1$ -s $ARG2$ -e $ARG3$
  }

define command{
        command_name    check_log3
        command_line    $USER1$/check_log3 -l $ARG1$ -s $ARG2$ -p $ARG3$ -w $ARG4$
        }

etc/objects/services.cfg

define service{
        use                             generic-service
        host_name                       logserver
        service_description             Fluentd missing messages
        max_check_attempts              1
        is_volatile                     1
        flap_detection_enabled          0
        notification_options            w
        check_command                   check_nrpe!check_log3!/var/log/fluentd/missing.ping.log /var/log/fluentd/seek.file ".*" 1
        }

define service{
        use                             generic-service
        host_name                       logserver
        service_description             Fluentd TCP port 24224 check
        check_command                   check_tcp!24224!3!5
        }
define service{
        use                             generic-service
        host_name                       logserver
        service_description             Fluentd UDP port 24224 check
        check_command                   check_udp!24224!hello!''
        }

(logserverの)etc/nrpe.cfg

command[check_log3]=/usr/local/nagios/libexec/check_log3 -l $ARG1$ -s $ARG2$ -p $ARG3$ -w $ARG4$

通知

こんな感じで来ます。

***** Nagios *****

Notification Type: PROBLEM

Service: Fluentd missing messages
Host: logserver
Address: ***.***.***.***
State: WARNING

Date/Time: Tue Feb 5 17:41:59 JST 2013

Additional Info:

WARNING: Found 1 lines (limit=1/1000): 2013-02-05T02:55:12Z webserver01 /var/log/app/error_log

*1:flowcounterを用いた監視はFluentd Meetup #2 @外道父 Fluentdを優しく見守る監視事例が参考になります。

*2:LOGがローテーションされると、シークファイルがリセットされないままなので最初の異常を見逃すことがあったり、ひっかけるキーワードに正規表現を使えないなどなにかと不便。