LoginSignup
2
1

More than 5 years have passed since last update.

fluentdでsyslog+file_bufferを使うとエラーが出てbuffer_file処理が止まる件の対応方法

Posted at

長らくはまっていた件の解決法がわかったので、同じような構成の人はあまりいないと思うけど一応シェア。

概要

nxlogとfluentdを連携(両者をsyslog(任意のTCPポートリッスン)で連携)させて使っていて、かつ初期emitをbuffer_fileにしているようなケースで発生

例えば、下記のような構成

webサーバ(nxlog)
↓ TCP
fluentd(syslog)
↓パースしてfileにキューイング
fluentd(buffer_file) 
↓キューイングしたファイルを1秒間隔で書込
Elasticsearch

内容

要約すると、fluentd停止時に残ったbuffer_fileに対してsyslog受信したデータを書きこもうとする時に、起動時にbuffer_fileをフラッシュするので該当ファイルがなくそのプロセスがコケる。。。しばらくはまっていた。

【処理の流れ】
①fluentdの停止時にsyslogポートのリッスンを停止するまではnxogはデータを投げ続ける
②fluentd停止時に、bufferファイルが残った状態になる
③fluentd開始と同時に、bufferのflush(この構成だとElasticsearchへの書込)イベント発生
④同時にsyslog受信も始まりbufferへの書込も開始

この時、③のflush済のbuffer_fileに運悪く書込が走ると、下記のようなエラーが出てそれ以後処理が全てfailする

2015-09-25 15:53:11 +0900 [warn]: parse failed No such file or directory @ sys_fail2 - (/var/log/td-agent/buffer/aaa_es..b5208c33e778dc0c0.buffer, /var/log/td-agent/buffer/aaa_es..q5208c33e778dc0c0.buffer)

<対応>
buffer pluginの中で下記設定を入れるとプロセス停止時に、キューをflushするのでこの事象は回避出来る。
複数回試して、検証済

flush_at_shutdown true

上記オプションが、buffer_memoryはデフォルトtrueで、fileはfalseになっているらしいがなぜだろう。。
でも、解決してよかった。

お役に立つ人がいれば。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1