fluentd自身のログを拾う

fluentd

fluentdは自身のログも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"}

参考

fluentd自身のログにまつわるノウハウ - still deeper