単一の logrotate インスタンスが追いつくことができない場合、大量のファイルのための高度な logrotate

単一の logrotate インスタンスが追いつくことができない場合、大量のファイルのための高度な logrotate

私は多数のファイルのリモートログストアとして機能するサーバーを管理しています。現在、単一のlogrotateインスタンスではこのログの量に追いつくことはできません。ログの回転を高速化する最良の方法は何ですか(複数のインスタンスを並列に実行可能)。

以下は明確な付録です。

  • ディスクI / Oは問題ではありません。ログやエントリは失われません。
  • システムはこの操作に比べてモンスターであり(電力が豊富なクアッドコアXeonです)、ボトルネックは圧縮です。 1つのコアが1.00負荷に達しましたが、圧縮キューを完了できませんでした。
  • ログファイルはコピーされません。毎日のバックアップを別のディスクに保存するだけで、ボトルネックも発生しません。
  • パターンごとにログファイルをグループ化できます。ファイルは大きくなく、ただ多いです。ログの回転を並列化する方法がわからず、アイデアがありますが、リソースが見つかりません。実際、質問の鍵となるのは、logrotate が構成ファイルまたは構成ファイルの各スタブに対してサブプロセスを生成することです。

答え1

logrotate の複数のインスタンスを実行できます。異なるファイルセットを処理し、異なる状態ファイルを使用する必要があります。

bzipの代わりにgzip(標準圧縮)を使用する必要があります。私が知っている限り、gzipにいくつかの追加オプションを渡すことができるので、より高速な圧縮を使用するように指示できます。

答え2

お客様の要件について詳しくお知らせください。あなたのサーバーを制限する要因が何であるかを推測することは困難です。

  • ディスクI/O?これらのログファイルをディスク/ファイルシステム全体に配布できます。
  • CPU - これらのログを回転させると圧縮されますか?内部圧縮またはハードウェアアクセラレーション機能を備えたファイルシステムを使用することもできます。
  • ディレクトリキャッシュ? Chris Cardの回答を参照してください。ファイルを複数のディレクトリに分散させ、同様に重要なのは、これらのファイル名の初期文字を異なるものにすることです。そうしないと、そのファイルに適用されたディレクトリキャッシュの利点を見ることができないため、ルックアップが大幅に遅くなります。
  • サーバーが制限に達した場合、ログの回転に対応していますか、またはログエントリが失われましたか?
  • これらのログファイルをコピーしていますか、それとも移動していますか(同じファイルシステム内で)?
  • ...

ログファイルの構造を設計すると、ファイルを並列に回転させることに問題はありません。

追加されたリクエストに応答するには編集してください

私が知っている限り、logrotate自体は並列化されません。明確な構造が確立されたら、それを手動で並列化するいくつかの方法(または少なくとも問題となる部分)を調べることができます。

  • 圧縮コマンド自体:ラッパースクリプトを使用して圧縮を実行できます。スクリプトがすぐに返されると、結果のgzipがバックグラウンドで実行される可能性があります。したがって、logrotate が次のログファイルに移動している間は、圧縮操作が実行され続けます。 2つの注意事項:
    1. delaycompressプロセスがSIGHUPまたは新しいログを開始する場合(プロセスに応じて)、ログファイルの操作を避けるために安全で開いていることをお勧めします。
    2. また、CPU時間を競い合う多くの並列圧縮操作を避けるために、圧縮作業が「良い」状態になることを願っています。
  • 複雑であると感じた場合(またはログホストを制限する多数の並列gzip操作で終わる場合)、後で「compressコマンドで生成されたリストからファイルを圧縮するワーカープロセスセットの作成に切り替えることができます。」 logrotateのスクリプト構成説明されています。
  • いくつかの計画では、logrotateのスタンドアロンインスタンスを実行できます。
    • 各インスタンスには独自の設定ファイルが必要です。
    • 各インスタンスには、ログファイルを監視するための独自のディレクトリセットが必要です。これには別のcrontabエントリを設定できます(おそらく設定する必要があります)。
    • 各インスタンスには独自のstatefile(設定可能)が必要です。

答え3

役に立つことの1つは、すべてのログを同じディレクトリに保存しないことです。同じディレクトリに多数のファイルを保存すると、パフォーマンスが著しく低下する可能性があります。

答え4

ホストにCPUコアが多いが、デフォルトの圧縮ユーティリティがシングルスレッドで、単一コアでボトルネックが発生している場合は、他のコアでより多くの圧縮スループットを利用して圧縮操作を迅速に完了できます。たとえば、gzipの代わりにpigz、bzip2の代わりにpbzip2を使用します。

関連情報