跳到主要内容

慢查询问题

Promql 的基础知识看这篇文章 Prometheus 提供了自定义的 Promql 作为查询语句,在 Graph 上调试的时候,会告诉你这条 Sql 的返

回时间,如果太慢你就要注意了,可能是你的用法出现了问题。 评估 Prometheus 的整体响应时间,可以用这个默认指标:

prometheus_engine_query_duration_seconds{}

一般情况下响应过慢都是Promql 使用不当导致,或者指标规划有问题,如:

大量使用 join 来组合指标或者增加 label,如将 kube-state-metric 中的一些 meta label和 node- exporter 中的节点属性 label加入到 cadvisor容器数据里,像统计 pod 内存使用率并按照所属节点 的机器类型分类,或按照所属 rs 归类。 范围查询时,大的时间范围 step 值却很小,导致查询到的数量过大。

rate 会自动处理 counter 重置的问题,最好由 promql 完成,不要自己拿出来全部元数据在程序中 自己做 rate 计算。 在使用 rate 时,range duration要大于等于step,否则会丢失部分数据 prometheus 是有基本预测功能的,如 deriv 和 predict_linear (更准确)可以根据已有数据预测 未来趋势

如果比较复杂且耗时的sql,可以使用 record rule 减少指标数量,并使查询效率更高,但不要什么 指标都加 record,一半以上的 metric 其实不太会查询到。同时 label 中的值不要加到 record rule 的 name 中。