Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

概要

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になっているらしいがなぜだろう。。
でも、解決してよかった。

お役に立つ人がいれば。

connehito
コネヒト株式会社は、「あなたの家族像を実現する社会をつくる」をビジョンに掲げる、現代社会における多様な家族像の実現を目指す会社。女性向けの「ママリ」「ママRework」や家族の購買の意思決定を支える「ママリ口コミ大賞」、男性育休冊子などを展開。
https://connehito.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away