15.11. 大きなクエリーを実行すると Loki エラーが発生する
大規模なクエリーを長時間実行すると、timeout
や too many outstanding requests
などの Loki エラーが発生する可能性があります。この問題を完全に修正する方法はありませんが、軽減する方法はいくつかあります。
- クエリーを調整してインデックス付きフィルターを追加する
-
Loki クエリーを使用すると、インデックスが付けられたフィールドまたはラベルと、インデックスが付けられていないフィールドまたはラベルの両方に対してクエリーを実行できます。ラベルにフィルターを含むクエリーのパフォーマンスが向上します。たとえば、インデックス付きフィールドではない特定の Pod をクエリーする場合は、その namespace をクエリーに追加できます。インデックス付きフィールドのリストは、"Network flows format reference" の
Loki label
列にあります。 - Loki ではなく Prometheus にクエリーすることを検討する
- 長い時間範囲でクエリーを実行するには、Loki よりも Prometheus の方が適しています。ただし、Loki の代わりに Prometheus を使用できるかどうかは、ユースケースによって異なります。たとえば、Prometheus のクエリーは Loki よりもはるかに高速であり、時間範囲が長くてもパフォーマンスに影響はありません。しかし、Prometheus メトリクスには、Loki のフローログほど多くの情報は含まれていません。ネットワーク可観測性 OpenShift Web コンソールは、クエリーに互換性がある場合は、自動的に Loki よりも Prometheus を優先します。互換性がない場合は、デフォルトで Loki が使用されます。クエリーが Prometheus に対して実行されない場合は、いくつかのフィルターまたは集計を変更して切り替えることができます。OpenShift Web コンソールでは、Prometheus の使用を強制できます。互換性のないクエリーが失敗するとエラーメッセージが表示され、クエリーを互換性のあるものにするためにどのラベルを変更すればよいかを判断するのに役立ちます。たとえば、フィルターまたは集計を Resource または Pods から Owner に変更します。
- FlowMetrics API を使用して独自のメトリクスを作成することを検討する
- 必要なデータが Prometheus メトリクスとして利用できない場合は、FlowMetrics API を使用して独自のメトリクスを作成できます。詳細は、「FlowMetrics API リファレンス」および「FlowMetric API を使用したカスタムメトリクスの設定」を参照してください。
- クエリーパフォーマンスを向上させるために Loki を設定する
問題が解決しない場合は、クエリーのパフォーマンスを向上させるために Loki を設定することを検討してください。一部のオプションは、Operator と
LokiStack
の使用、モノリシック
モード、Microservices
モードなど、Loki に使用したインストールモードによって異なります。-
LokiStack
またはMicroservices
モードでは、クエリーレプリカの数を増やして みてください。 -
クエリーのタイムアウト を増やします。また、
FlowCollector
spec.loki.readTimeout
で、Loki へのネットワーク観測読み取りタイムアウトを増やす必要があります。
-