td-agent -> Elasticsearchで困ったことをメモ
td-agentでリトライ上限を超えてタイムアウトで失敗したキューが消える
td-agentからElasticsearchにログを流し込んでたら、処理しきれなくてリトライ回数を超えて失敗してたキューをロストしてた。
以下のログがtd-agentのログに出てました。
2014-05-20 06:07:11 +0000 [error]: throwing away old logs.
たぶんElasticsearchにbulk APIで流し込むところのタイムアウトでこけてるので、以下の対応を考えた。
ログのロストをしないようにする
td-agentの設定にsecondaryディレクティブを設定して、リトライ上限を超えて失敗したキュー(チャンク)をファイルで保存しておいて、後でまとめて再実行する
ログを消失させたくない話 - OTメモ帳
上記のサイトを参考にさせてもらったらばっちりでした。ありがとうございます。
Elasticsearchのbulk APIを叩く際に、replication = asyncにする
td-agentのプラグインで
https://github.com/uken/fluent-plugin-elasticsearch/blob/master/lib/fluent/plugin/out_elasticsearch.rb:fluent-plugin-elasticsearchをカスタマイズ使っているのだけれども、bulk APIを叩くところにreplication : "async"ってパラメータを渡して、レプリケーションを非同期で行うようにしてレスポンスを速く返るようにする。
def send(data) client.bulk body: data replication: "async" end
元ネタは
Index API
さて効果は出るだろうか。