fluentd自身のログを拾う
fluentdfluentdは自身のログもfluent.error
のようなタグでイベントとして流す。
バッファを0にして意図的にエラーを発生させてみる。
<source>
@type forward
port 24224
bind 0.0.0.0
</source>
# throw away
<match fluent.info>
@type null
</match>
<match fluent.**>
@type stdout
</match>
# error!
<match **>
@type file
path /var/log/td-agent/hoge.log
buffer_chunk_limit 0
buffer_queue_limit 0
</match>
すると、こんなのがtd-agent.logに出力される。
fluent.error: {"error":"#<Fluent::BufferQueueLimitError: queue size exceeds limit>","error_class":"Fluent::BufferQueueLimitError","message":"forward error error=#<Fluent::BufferQueueLimitError: queue size exceeds limit> error_class=Fluent::BufferQueueLimitError"}
ただ、これだとaggregatorに集めたときにどのサーバーのfluentdに問題が発生してるのか分からない。 そこでホスト名を追加する。
fluentdのrecord_transformerでログを加工する - sambaiz.net
<filter fluent.**>
@type record_transformer
enable_ruby
<record>
hostname "#{Socket.gethostname}"
tag ${tag}
</record>
</filter>
fluent.error: {"error":"#<Fluent::BufferQueueLimitError: queue size exceeds limit>","error_class":"Fluent::BufferQueueLimitError","message":"forward error error=#<Fluent::BufferQueueLimitError: queue size exceeds limit> error_class=Fluent::BufferQueueLimitError",
"hostname":"*****","tag":"fluent.error"}