Logstash [スクラッチからスクラッチへ] [L13]パフォーマンスチューニング



Logstash Performance Tuning



目次

1.パフォーマンスチューニング(パフォーマンスチューニング)



1.1。パフォーマンストラブルシューティングガイド

1.1.1。パフォーマンスチェックリスト



1.2。 Logstashのパフォーマンスを調整および分析します(Logstashのパフォーマンスの調整とプロファイリング)

1.2.1。配管構成と性能の説明

1.2.2。分析リアクター




このセクションには、Logstashパフォーマンスのチューニングに関する次の情報が含まれています。

  • パフォーマンストラブルシューティングガイド
  • Logstashのパフォーマンスを調整および分析する

1.1。パフォーマンストラブルシューティングガイド

このトラブルシューティングガイドを使用して、Logstashのパフォーマンスの問題をすばやく診断して解決できます。このガイドは、パイプラインの高度な内部知識がなくても理解できます。ただし、このガイドを超えたい場合は、以下を読むことをお勧めします。 パイプラインドキュメント

パフォーマンスを向上させる最初の試みとして、建物から飛び降りて、pipe.workers(-w)などの設定を変更することをお勧めします。私たちの経験では、この設定を変更すると、使用される変数の数が増えるため、パフォーマンスの問題を解決するのがより困難になります。代わりに、一度に1つずつ変更を加え、結果を測定します。このリストの最後から始めることは、状況を判断するための信頼できる方法です。

1.1.1。パフォーマンスチェックリスト

  1. 入力ソースと出力ターゲットのパフォーマンスを確認します。
    1. Logstashは、接続されているサービスと同じくらい高速です。 Logstashは、入力および出力先の速度でのみデータを消費および生成できます。
  2. システム統計の表示:
    1. CPU
      1. CPUが頻繁に使用されているかどうかに注意してください。 Linux / Unixでは、top -Hを実行して、スレッドごとのプロセス統計と合計CPU統計を表示できます。
      2. CPU使用率が高い場合は、JVMヒープの確認に関するセクションにスキップしてから、Logstashワーカー設定の調整に関するセクションをお読みください。
    2. 記憶
      1. LogstashはJavaVMで実行されることに注意してください。これは、Logstashが常に割り当てられた最大量のメモリを使用することを意味します。
      2. 大量のメモリを使用し、Logstashがディスクにスワップする可能性のある他のアプリケーションを探します。これは、アプリケーションが使用する合計メモリが物理メモリを超えた場合に発生します。
    3. I / O使用率
      1. ディスクI / Oを監視して、ディスクが飽和しているかどうかを確認します。
        1. 使用するLogstashプラグイン(ファイル出力など)がストレージスペースを飽和させる可能性がある場合、ディスクが飽和する可能性があります。
        2. Logstashに多数のエラーログを生成させる多くのエラーが発生した場合、ディスクの飽和も発生する可能性があります。
        3. Linuxでは、iostat、dstat、または同様のツールを使用してディスクI / Oを監視できます。
      2. ネットワークI / Oのネットワーク飽和度を監視します。
        1. 多くのネットワーク操作を実行する入出力を使用すると、ネットワークが飽和状態になる可能性があります。
        2. Linuxでは、dstatやiftopなどのツールを使用してネットワークを監視できます。
    4. JVMヒープを確認します。
      1. ヒープサイズが小さすぎると、通常、CPU使用率が急速に増加し、JVMによる継続的なガベージコレクションが発生します。
      2. この問題を確認する簡単な方法は、ヒープサイズを2倍にして、パフォーマンスが向上したかどうかを確認することです。ヒープサイズを物理メモリの量を超えて増加させないでください。オペレーティングシステムおよびその他のプロセス用に、少なくとも1GBの空き容量を残してください。
      3. Javaで配布されているjmapコマンドラインユーティリティを使用するか、VisualVMを使用してJVMヒープをより正確に測定できます。詳細については、を参照してください。 ヒープのプロファイリング
      4. 非常にコストのかかるプロセスである実行時にヒープサイズが調整されないように、最小(Xms)と最大(Xmx)のヒープ割り当てサイズが同じ値に設定されていることを常に確認してください。
    5. Logstash作業プログラム設定を調整します。
      1. まず、-wフラグを使用して、パイプラインワーカーの数を増やします。これにより、フィルターと出力に使用できるスレッドの数が増えます。スレッドはI / Oでアイドル状態になる可能性があるため、必要に応じて、複数のCPUコアに安全に拡張できます。
      2. 出力バッチサイズを調整することもできます。 Elasticsearch出力などの多くの出力では、この設定はI / O操作のサイズに対応します。 Elasticsearch出力の場合、この設定はバッチサイズに対応します。

1.2。 Logstashのパフォーマンスを調整および分析します(Logstashのパフォーマンスの調整とプロファイリング)

Logstashのデフォルト値を選択すると、ほとんどのユーザーに高速で安全なパフォーマンスを提供できます。ただし、パフォーマンスの問題が見つかった場合は、一部のデフォルト設定を変更する必要がある場合があります。 Logstashは、パイプラインのパフォーマンスを調整するために、pipeline.workers、pipeline.batch.size、pipeline.batch.delayの構成可能なオプションを提供します。これらのオプションの設定の詳細については、を参照してください。 logstash.yml

これらのオプションを変更する前に、パフォーマンストラブルシューティングガイド( パフォーマンストラブルシューティングガイド )。

  • pipe.workers設定は、フィルタリングと出力処理のために実行するスレッドの数を決定します。イベントがバックアップされている場合、またはCPUが飽和していない場合は、このパラメーターの値を増やして、使用可能な処理能力をより有効に活用することを検討してください。これらのスレッドは外部システムへの書き込み時にI / O待機状態で多くの時間を費やす可能性があるため、この数が使用可能なプロセッサの数を超えると、良好な結果を見つけることもできます。このパラメーターの有効な値は正の整数です。
  • pipe.batch.size設定は、単一のワーカースレッドがフィルターと出力の実行を試みる前に収集するイベントの最大数を定義します。通常、バッチサイズが大きいほど効率的ですが、メモリのオーバーヘッドが増加します。一部のハードウェア構成では、パフォーマンスの低下を回避するために、jvm.options構成ファイルのJVMヒープスペースを増やす必要があります。 (詳細については、を参照してください。 Logstash構成ファイル )メモリ不足の例外に関連するガベージコレクションまたはJVMクラッシュが頻繁に発生するため、最適範囲外の値はパフォーマンスの低下を引き起こします。出力プラグインは、各バッチを論理ユニットとして処理できます。たとえば、Elasticsearchの出力は、受信したバッチごとにバッチリクエストを発行します( 一括リクエスト ))。 pipe.batch.size設定を調整して、Elasticsearchに送信されるバッチリクエストのサイズを調整します。
  • pipe.batch.delay設定を調整する必要があることはめったにありません。この設定は、Logstashパイプラインの遅延を調整します。パイプラインバッチ遅延は、Logstashが現在のパイプラインワーカースレッドでイベントを受信した後、新しいメッセージを待機する最大時間(ミリ秒単位)です。この期間の後、Logstashはフィルターと出力の実行を開始します。 Logstashがイベントを受信して​​からフィルターでイベントを処理するまでの最大待機時間は、pipeline.batch.delayとpipeline.batch.sizeの積です。

1.2.1。配管構成と性能の説明

デフォルトのパイプライン設定を変更する場合は、次の提案を検討してください。

  • 進行中のイベントの総数は、pipeline.workersとpipeline.batch.sizeの積によって決まります。この製品は、オンボードカウントと呼ばれます。 pipe.workersとpipeline.batch.sizeの設定を調整するときは、飛行中の値を覚えておいてください。不規則な間隔で大きなイベントを断続的に受信するパイプには、これらのピークを処理するのに十分なメモリが必要です。それに応じて、jvm.options構成ファイルでJVMヒープスペースを設定します。 (詳細については、を参照してください。 Logstash構成ファイル 。)
  • 各変更を測定して、パフォーマンスが低下するのではなく改善されることを確認します。
  • イベントサイズの突然の増加に対処するのに十分なメモリがあることを確認してください。たとえば、例外を生成するアプリケーションは、大きなテキストブロックとして表されます。
  • 出力はI / O待機状態でアイドル時間を費やすことが多いため、ワーカープログラムの数はCPUコアの数よりも多く設定できます。
  • Javaのスレッドには名前があり、jstack、top、およびVisualVMグラフィカルツールを使用して、特定のスレッドで使用されているリソースを判別できます。
  • Linuxプラットフォームでは、Logstashは説明的なものを使用して、使用できるすべてのスレッドにマークを付けます。たとえば、入力は[base] workerNとして表示されます。ここで、Nは整数です。可能であれば、他のスレッドにマークを付けて、それらの目的を判断できるようにします。

1.2.2。分析リアクター

Logstashを調整するときは、ヒープサイズを調整する必要がある場合があります。あなたはそれを使うことができます VisualVM ヒープを分析するためのツール。モニターペインは、ヒープ割り当てが現在のワークロードに対して十分であるかどうかを確認するのに特に役立ちます。以下のスクリーンショットは例を示しています モニター ペイン。最初のペインでは、オンボードイベントが多すぎるように構成されたLogstashインスタンスを調べます。 2番目のペインは、適切な数のフライトイベントで構成されたLogstashインスタンスを調べます。 Logstashのメモリ要件は送信するメッセージのタイプに大きく依存するため、ここで使用される特定のバッチサイズは特定のワークロードには適用されない可能性が高いことに注意してください。

最初の例では、CPU使用率が効率的ではないことがわかりました。実際、JVMは「フルGC」のためにVMを停止しなければならないことがよくあります。完全なガベージコレクションは、過度のメモリプレッシャーの一般的な症状です。これは、CPUチャートのスパイクモードで表示されます。構成効率が高い例では、GCグラフィックモードがよりスムーズになり、CPU使用率がより均一になります。また、割り当てられたヒープサイズと最大許容ヒープの間に十分なマージンがあることがわかります。これにより、JVMGCに大きな作業スペースが提供されます。

使用と優れた VisualGC プラグインと同様のツールは、詳細なGC統計をチェックし、過剰に割り当てられたVMが、リソースを大量に消費する旧世代の「フル」GCで費やされる時間と比較して、効率的なEdenGCで費やす時間がほとんどないことを示します。 A

GCモードが許容できる限り、最大ヒープサイズまで増やすことも許容される場合があります。このようなヒープサイズのピークは、パイプライン内の多数のイベントに応答して発生します。一般に、使用されるヒープメモリの量と最大値の間には一定のギャップが維持されます。このドキュメントは、JVMGCチューニングの包括的なガイドではありません。公式を読む オラクルガイド このトピックの詳細については。 'も読むことをお勧めします Javaパフォーマンスのデバッグ 」。