15.11. 运行大型查询会导致 Loki 错误
当长时间运行大型查询时,可能会导致 Loki 错误,如 timeout
或 too many outstanding requests
。这个问题没有完全的修复,但有几种方法可以缓解它:
- 调整查询以添加索引过滤
-
使用 Loki 查询,您可以查询索引和非索引字段或标签。包含标签过滤的查询更好。例如,如果您查询一个特定 Pod,它不是 indexed 字段,您可以将其命名空间添加到查询中。索引字段列表可在
Loki label
列中的 "Network flow format reference" 中找到。 - 考虑查询 Prometheus 而不是 Loki
- Prometheus 比 Loki 更适合在大型时间范围上查询。但是,使用 Prometheus 还是 Loki 取决于您的具体用例。例如,对 Prometheus 的查询比 Loki 快,大时间范围不会影响性能。但是,和 Loki 相比,Prometheus 指标中包括的流日志的数量较少。如果查询兼容,Network Observability OpenShift Web 控制台会自动优先选择 Prometheus over Loki,否则默认为 Loki。如果您的查询没有针对 Prometheus 运行,您可以更改一些过滤或聚合来切换。在 OpenShift Web 控制台中,您可以强制使用 Prometheus。当不兼容的查询失败时会显示错误消息,这可帮助您找出要更改哪个标签,以使查询兼容。例如,将过滤器或聚合从 Resource 或 Pod 更改为 Owner。
- 考虑使用 FlowMetrics API 创建自己的指标
- 如果您不需要的数据不能作为 Prometheus 指标提供,您可以使用 FlowMetrics API 创建自己的指标。如需更多信息,请参阅"FlowMetrics API 参考"和"使用 FlowMetric API 配置自定义指标"。
- 配置 Loki 来提高查询性能
如果问题仍然存在,您可以考虑配置 Loki 来提高查询性能。有些选项取决于您用于 Loki 的安装模式,如使用 Operator 和
LokiStack
,或Monolithic
模式或Microservices
模式。-
对于
LokiStack
或Microservices
模式,尝试 增加 querier 副本的数量。 -
增加查询超时。您还必须在
FlowCollector
spec.loki.readTimeout
中增加到 Loki 的 Network Observability 读取超时。
-
对于