fluentd で buffer されたメッセージを強制的に flush する方法

Written by @ryysud

Apr 17, 2018 23:00 · 300 words · 1 minute read #fluentd

結論

SIGUSR1 を投げてやるだけ 三╰( `•ω•)╮-=ニ=゚。☆

# td-agent ならこう
$ kill -SIGUSR1 $(cat /var/run/td-agent/td-agent.pid)

# 生の fluend ならこう ( pid ファイルの path は起動時に指定したものに対して実行してください )
$ kill -SIGUSR1 $(cat /path/to/fluentd.pid)

補足

Fluentd’s Signal Handling の SIGUSR1 に答えが書いてある通りで、単純に fluentd (or td-agent) のプロセスが SIGUSR1 を受け取ると、強制的にバッファに溜まったメッセージ(chunk)がフラッシュされる仕様となっている。

Forces the buffered messages to be flushed and reopens Fluentd’s log

https://docs.fluentd.org/v1.0/articles/signals

これを知るまでは flush_interval 1s や chunk_limit_size 1k ( v0.12 でいう buffer_chunk_limit ) のような設定を適用してみたり、無駄にリクエストを投げ続けて buffer に溜めるたりとアホなことばかりやってました…。やっとこの愚行から卒業できて良かったです。おしまい。