なんかかきたい

プログラミングなどの個人的なメモやサークル「ゆきいろパラソル」の情報を載せてます

Fluentdを使ってKibanaにデータを入れてるけど一部のログを落としていたのでリプレイしたい

Fluentdを使ってKibanaにデータを入れてるけど一部のログを落としていたのでリプレイしたいってときに、 取りこぼした時間分のログを置いて、Fluentdに読み込ませて送ればいいじゃんっていう気持ちになるけど、 ログの量が多いとクライアントが高速にログを読みすぎてFluentdのバッファーが溢れてしまう。

Fluentdの用途的におかしいので仕方ないのだけどなんとかしたいので、 通常時と同じようにログに追記していくようにする。 そのときに trottle(1) を使い、ストリームの速度を制限する。

cat foobar_log | throttle -l /tmp/throttle.ctl -M 1 > /tmp/foobar_log_replay.log

これで書き込み速度を1MByte/sに制限できる。 -l は制御用の名前付きパイプを作るオプション。 速度が早すぎたり遅すぎたりした際に調整するのに便利。

throttle -t /tmp/throttle.ctl -B 1

このようにすると、転送は1Byte/sになる。速すぎたときに使う。

流すログの量が多い場合は、バッファーのディレクトリを監視しながら 自動でlimitを調整できると便利かもしれない。

<source>
  type tail
  path /tmp/foobar_log_replay.log
  tag kibana4.foobar
  format json
  time_key time
  read_from_head true
</source>

<source>
  type tail
  path /var/fluentd/foobar/*.log
  pos_file /var/fluentd/foobar_log.pos
  tag kibana4.foobar
  format json
  time_key time
</source>

かしこ