拡張および保存できるセミラウンドロビンファイルを実装する
-
30-10-2019 - |
質問
OK、そのタイトルは少し混乱するでしょう。もう少し良く説明してみましょう。私はロギングプログラムを構築しています。プログラムには3つの主要な状態があります。
ラウンドロビンバッファファイルに書き込み、最後の10分間のデータのみを保持します。
時間を無視して、バッファファイルに書き込みます(すべてのデータを記録します)。
バッファファイル全体を変更し、過去10分間のデータで新しいファイルを起動します(および状態を1に変更します)。
さて、ユースケースはこれです。ネットワークで時々ネットワークボトルネックを経験しています。したがって、TCPトラフィックがボトルネックを検出したときにTCPトラフィックを記録するシステムを構築したい(Nagiosを介した検出)。ただし、ボトルネックを検出するまでに、有用なデータのほとんどはすでに送信されています。
だから、私が望んでいるのは、次のようなものを実行するディーモンを持っていることです dumpcap
いつも。通常モードでは、過去10分間のデータを保持します(必要でない場合は、データのボート負荷を維持することはできません)。しかし、ナギオスがアラートするとき、私はすべてを保存するためにディーモンに信号を送信します。次に、Naigosが回復すると、別の信号を送信して保存を停止し、バッファーを保存ファイルにフラッシュします。
さて、問題は、回転する10分間のデータをきれいに保存する方法がわからないことです。 10分ごとに新しいファイルを保存して、モード1の場合は古いファイルを削除できますが、それは私には少し汚いように見えます(特に、アラートがファイルで起こったときに把握することになると)。
理想的には、保存されたファイルは、アラートが常にファイルの10:00マークになるようにする必要があります。それは10分ごとに新しいファイルで可能ですが、その時点までファイルを「修理」するのは少し汚いようです。
何か案は?回転ファイルシステムを実行して、最後に1に組み合わせる必要があります(かなりの後処理を行う)?後処理の必要がないように、セミラウンドロビンファイルをきれいに実装する方法はありますか?
ありがとう
ああ、この段階では言語はそれほど重要ではありません(私はPythonに傾いていますが、他の言語に異議はありません。それは全体的なデザインよりも問題ではありません)...
正しい解決策はありません