わかりました、そのタイトルは少し混乱するでしょう。もう少しうまく説明してみましょう。ロギングプログラムを構築しています。プログラムには 3 つの主な状態があります。
最後の 10 分間のデータのみを保持して、ラウンド ロビン バッファー ファイルに書き込みます。
時間を無視してバッファファイルに書き込みます (すべてのデータを記録します)。
バッファ ファイル全体の名前を変更し、過去 10 分間のデータで新しいファイルを開始します (状態を 1 に変更します)。
さて、ユースケースはこれです。私たちのネットワークでは、ときどきネットワークのボトルネックが発生しています。そこで、ボトルネックを検出したときに TCP トラフィックを記録するシステムを構築したいと考えています (Nagios 経由の検出)。ただし、ボトルネックが検出されるまでには、有用なデータのほとんどがすでに送信されています。
だから、私が望むのは、常に何かを実行するデーモンを持つことdumpcap
です。通常モードでは、過去 10 分間のデータのみが保持されます (不要なデータを大量に保持しても意味がないため)。しかし、Nagios がアラートを出すと、すべてを保存するようにデーモンにシグナルを送ります。その後、Naigos が回復すると、別の信号を送信して保存を停止し、バッファーを保存ファイルにフラッシュします。
さて、問題は、回転する 10 分間のデータをきれいに保存する方法がわからないことです。モード 1 の場合は、10 分ごとに新しいファイルを保存し、古いファイルを削除することもできます。
理想的には、保存されたファイルは、アラートが常にファイルの 10:00 マークにあるようにする必要があります。これは 10 分ごとに新しいファイルを作成することで可能ですが、その時点までファイルを「修復」するのは少し面倒に思えます。
何か案は?ローテーション ファイル システムを実行し、最後にそれらを 1 つに結合する必要がありますか (かなりの後処理を行います)。後処理が不要になるようにセミラウンドロビンファイルをきれいに実装する方法はありますか?
ありがとう
ああ、この段階では言語はそれほど重要ではありません (私は Python に傾倒していますが、他の言語に異論はありません。全体的な設計よりも問題ではありません)...