質問: お世話になります。 IoT機器を使ってログデータをTreasureDataへfluentdで送信しています。 エラーとなり、bufferファイルに書き込まれた続ける状態になってしまったのですが ・このバッファファイルのデータをTreasureDataへ送信する方法(復旧方法)。 ・今後のエラー対策として、設定にアドバイスあれば ご教授願いたく。 よろしくお願いいたします。 設定ファイルは以下のような感じです。 ------------------ type tail format json path /etc/config/fluent/fluent-log pos_file /etc/config/fluent/tail.pos tag td.hoge.opelog_data type tdlog apikey myapikey buffer_type file buffer_path /etc/config/fluent/myapp.*.buffer flush_interval 10s use_ssl true エラーログは以下のような感じです。 ----------------- 2016-02-19 02:13:09 +0000 [warn]: temporarily failed to flush the buffer. next_retry=2016-02-19 11:31:40 +0000 error_class="RuntimeError" error="Failed to upload to Treasure Data 'hoge.opelog_data' table: # (1457 bytes; 0.542692391 seconds)" plugin_id="object:149370" 2016-02-19 02:13:09 +0000 [warn]: suppressed same stacktrace
回答: こんにちは。 下記のエラー自体が常に出る状態でなければ、一時的なネットワークの問題で、名前解決ができずに失敗してしまっているようです。 > > getaddrinfo: Name or service not known > > > fluentd自体はこうしたエラー時に自動でリトライを行いますので、この後にログ内に`retry succeeded`と表示されていれば問題ありません。 下記がFluentdの障害時の動作について詳しく説明が記載されていますので参考になるかと思います。 http://ogibayashi.github.io/blog/2014/06/04/how-fluentd-works-in-case-of-failures/ また、Fluentdでバッファに溜まってしまったデータを強制的にFlushさせる方法としては、下記のコマンドを実行するとよいです。参考:https://docs.treasuredata.com/articles/td-agent#confirm-data-upload ``` $ kill -USR1 `cat /var/run/td-agent/td-agent.pid` ``` 今回のデータソースとしては、Jsonファイルになっていますので、仮にFluentdがリトライの失敗を続けて、 リトライやキューの上限を超えたとしても、Treasuredata上のデータを確認してどのレコードまで入っているかを確認して、その部分からJsonファイルを読み直せばデータロストは防げるかと思います。 out_td pluginを利用して、またエラーもTreasureDataに関連していますので、TreasureDataのサポートまで問い合わせていただくと同様の問題の際には対応できますので、お気軽にサポートまでお声がけください。