Fluentdが数時間後にENOENTを出力する2021-09-21藤本クリアコードではFluentdのサポートを受け付けています。トラブル発生時の原因調査まで様々です。いくつか事例を取り上げて紹介していきます。今回の記事で取り上げるのは、障害対応からの一事例です。ご相談内容サーバーからログを転送するのにFluentdを利用しています。最近、Fluentdを起動してから数時間すると、突然ENOENTエラーが発生するようになりました。起きるわけではなく、再現条件もよくわからないので困っています。この原因と解決方法を調査いただけないでしょうか。Fluentdの障害調査は難しいのか開発者の観点からすると、Fluentdの特性の一つは、長時間連続して稼働しつづける点にあります。この類のプログラム(いわゆるデーモン)では状態の管理が常に問題になります。ロジックの少しの不備が、長い時間をかけると膨大なズレを引き起こす事が少なくないためです。ほんの一箇所のオブジェクトの解放のし忘れであるといったことは実にありがちです。問題を再現させることも容易で、トラブルシューティングも早期に片付く傾向にあります。障害調査も紆余曲折をたどる事が少なくありません。それをほとんど唯一のヒントとして調査を進めました。問題箇所の実装と関数の呼び出し関係から、考えられる仮説を洗い出していく地道な作業になります。今回のエラー文言は次のようなものでした。そこから原因と対応策の大体の目星をつけていく事になります。製品に対する理解の深さと根気強さが重要になる部分です。buf_file.rbの67行目のFileBufferChunk.mv()関数です。転送ステータスを管理するためです)。いうのが発生していた状況のようです。問題は、どうやったらこんな状態が起こりうるのかです。その仮説を一つ一つ再現環境で試しては棄却していくという調査過程になりました。別のプログラムがバッファファイルを削除している。Fluentdのバッファパスの生成ロジックに、流量が多い場合のみ顕現する不具合がある。Fluentdが多重起動した結果、不整合が起きている。上記のエラーが発生することに思い至りました。インスタンスが再起動するタイミングで、データを管理する"帳簿"がリフレッシュされます。2つのインスタンスがパスを共有していると、複数のFluentdが同じファイルを転送しはじめてしまいます。ユニークになるように調整いただくことで、無事にエラーが発生しなくなりました。ケースではすんなりと解決までたどり着くことができます。さいごにクリアコードではこれまで5年以上にわたって、様々なお客様のFluentdの課題解決を行ってきました。こちらのお問い合わせフォームからご連絡ください。フリーソフトウェア開発での開発の仕方をベースに、成果や知識を公開し共有しながら業務に携われます。クリアコードのYouTubeチャンネルです。メンバーの登壇動画や、開発プロダクトに関する動画を公開しています。Fluentdに関してトラブルシューティングガイドを公開しています。問題点の確認の仕方や、これまでFluentd開発にかかわる間にあった事例などを紹介しています。4.0とGFDLのデュアルライセンスで自由に利用できます。クリアコードはプログラミングが楽しいソフトウェア開発者を1名募集しています。クリアコードは「クリアコードをいい感じにする人」を1名募集しています。クリアコードはフリーソフトウェア開発で培った技術力を提供しています。Thunderbird)とRubyとGroonga(全文検索)に関連した開発を得意としています。株式会社クリアコード。