Fluentdで既存の(Gemでインストールした)プラグインを改修して利用する方法を紹介します。
前提としてFluentdは「CentOS6にFluentdをインストール」の手順にてインストールされているとします。

ポイントは以下のようになります。

  • 継承したクラス(ファイル)は/etc/td-agent/pluginに配置
    • ファイル名はプラグインのファイル名のルール通り
  • 継承するプラグイン(クラス)のファイルをrequireする

tagomoris / fluent-plugin-datacounter :
fluent-plugin-datacounter

上記プラグインを切りの良い間隔(1分間隔の出力ならhh::mm::00でログ出力)で
ログ出力(watchメソッドをオーバーライド)するようにしてみました。

# cat /etc/td-agent/plugin/out_datacounter_ex.rb
module Fluent
require 'fluent/plugin/out_datacounter'

class DataCounterExOutput Plugin.register_output('datacounter_ex', self)

def watch
@last_checked = Fluent::Engine.now
while true
sleep 0.5
if Engine.now != @last_checked && Engine.now % @tick == 0
now = Engine.now
flush_emit(now - @last_checked)
@last_checked = now
end
end
end

end

end

オーバーライドした親のメソッドは下記の通りです。

def watch
# instance variable, and public accessable, for test
@last_checked = Fluent::Engine.now
while true
sleep 0.5
if Fluent::Engine.now - @last_checked >= @tick
now = Fluent::Engine.now
flush_emit(now - @last_checked)
@last_checked = now
end
end
end

設定ファイルの修正(特にtype)も必要になります。

cat /etc/td-agent/td-agent.conf
...
type datacounter_ex
unit minute
aggregate all
count_key ident
pattern1 history ^-bash$
pattern2 audit ^audispd$
tag datacounter.syslog
...

Fluentd(td-agent)を再起動すると、下記のように変更された動作(切りの良い時刻hh:mm:00でログ出力)を
確認できます。

# tail /tmp/datacounter.syslog.20130212.b4d585c76d5883b21
...
2013-02-12T22:46:00+09:00 datacounter.syslog {"unmatched_count":3,"unmatched_rate":0.05,"unmatched_percentage":37.5,"history_count":0,"history_rate":0.0,"history_percentage":0.0,"audit_count":5,"audit_rate":0.08,"audit_percentage":62.5}
2013-02-12T22:47:00+09:00 datacounter.syslog {"unmatched_count":3,"unmatched_rate":0.05,"unmatched_percentage":37.5,"history_count":0,"history_rate":0.0,"history_percentage":0.0,"audit_count":5,"audit_rate":0.08,"audit_percentage":62.5}
2013-02-12T22:48:00+09:00 datacounter.syslog {"unmatched_count":3,"unmatched_rate":0.05,"unmatched_percentage":37.5,"history_count":0,"history_rate":0.0,"history_percentage":0.0,"audit_count":5,"audit_rate":0.08,"audit_percentage":62.5}

今回1分間隔でしかテストできておらず、他の間隔での挙動を確認できていません。
そのため、本稿はひとまず備忘録として捉えて頂けると幸いです。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら