記憶永続化用のメモブログ

脳内に揮発性記憶領域しかないことに気づいたので作成

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

さて効果は出るだろうか。