第13章 パフォーマンスと信頼性のチューニング
13.1. フロー制御メカニズム
ログの生成速度が収集できる速度よりも速い場合、出力に送信されるログの量の予測や制御が困難になることがあります。出力に送信されるログの量を予測または制御できないと、ログが失われる可能性があります。システムの停止が発生し、ユーザーの制御なしにログバッファーが蓄積されると、接続が復元されるときに回復時間と遅延が長くなることもあります。
管理者は、ログのフロー制御メカニズムを設定することで、ログの速度を制限できます。
13.1.1. フロー制御メカニズムの利点
- ログのコストと量をより正確に事前予測できます。
- ノイズの多いコンテナーが無制限に生成するログトラフィックにより、他のコンテナーのログが埋もれることがなくまります。
- 価値の低いログを無視することで、ロギングインフラストラクチャーの負荷が軽減されます。
- レート制限を引き上げることで、値の高いログを値の低いログよりも優先することができます。
13.1.2. レート制限の設定
レート制限はコレクターごとに設定されます。つまり、ログ収集の最大レートはコレクターインスタンスの数にレート制限を掛けたものになります。
ログは各ノードのファイルシステムから収集されるため、各クラスターノードにコレクターがデプロイされます。たとえば、3 ノードクラスターでは、コレクターあたりの最大レート制限が 1 秒あたり 10 レコードの場合、ログ収集の最大レートは 1 秒あたり 30 レコードになります。
出力に書き込まれるレコードの正確なバイトサイズは、変換、エンコーディングの違い、その他の要因によって異なる可能性があるため、レート制限はバイト数ではなくレコード数で設定されます。
ClusterLogForwarder
カスタムリソース (CR) でレート制限を設定するには、次の 2 つの方法があります。
- 出力レート制限
- 出力のネットワークやストレージ容量などに合わせて、選択した出力への送信ログの速度を制限します。出力レート制限では、出力ごとの集約レートを制御します。
- 入力レート制限
- 選択したコンテナーのコンテナーごとのログ収集レートを制限します。
13.1.3. ログフォワーダーの出力レート制限の設定
ClusterLogForwarder
カスタムリソース (CR) を設定することで、送信ログのレートを指定の出力に制限できます。
前提条件
- Red Hat OpenShift Logging Operator がインストールされている。
- 管理者権限がある。
手順
特定の出力の
ClusterLogForwarder
CR にmaxRecordsPerSecond
制限値を追加します。次の例は、
kafka-example
という名前の Kafka ブローカー出力のコレクターごとの出力レート制限を設定する方法を示しています。ClusterLogForwarder
CR の例apiVersion: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: # ... spec: # ... outputs: - name: kafka-example 1 type: kafka 2 limit: maxRecordsPerSecond: 1000000 3 # ...
ClusterLogForwarder
CR を適用します。コマンドの例
$ oc apply -f <filename>.yaml
関連情報
13.1.4. ログフォワーダーの入力レート制限の設定
ClusterLogForwarder
カスタムリソース (CR) を設定することで、収集される受信ログの速度を制限できます。コンテナーごとまたは namespace ごとに入力制限を設定できます。
前提条件
- Red Hat OpenShift Logging Operator がインストールされている。
- 管理者権限がある。
手順
特定の入力の
ClusterLogForwarder
CR にmaxRecordsPerSecond
制限値を追加します。さまざまなシナリオで入力レート制限を設定する方法を以下に例示します。
特定のラベルを持つコンテナーに対してコンテナーごとの制限を設定する
ClusterLogForwarder
CR の例apiVersion: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: # ... spec: # ... inputs: - name: <input_name> 1 application: selector: matchLabels: { example: label } 2 containerLimit: maxRecordsPerSecond: 0 3 # ...
選択した namespace 内のコンテナーごとに制限を設定する
ClusterLogForwarder
CR の例apiVersion: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: # ... spec: # ... inputs: - name: <input_name> 1 application: namespaces: [ example-ns-1, example-ns-2 ] 2 containerLimit: maxRecordsPerSecond: 10 3 - name: <input_name> application: namespaces: [ test ] containerLimit: maxRecordsPerSecond: 1000 # ...
ClusterLogForwarder
CR を適用します。コマンドの例
$ oc apply -f <filename>.yaml