03.7、PromQL高级查询
PromQL 高级查询
本节将学习:多指标关联、子查询、标签操作,以及常用查询模式。这些技巧能帮助我们构建更复杂、更强大的查询。
多指标关联查询
什么是多指标关联? 在 PromQL 中,可以关联多个指标进行查询。例如计算比率、比较不同指标、组合多个指标。
PromQL 支持哪些关联操作符呢?
- :加法。例如
+metric1 + metric2 - :减法。例如
-metric1 - metric2 - :乘法。例如
*metric1 * metric2 - :除法。例如
/metric1 / metric2 - :取模。例如
%metric1 % metric2 - :幂运算。例如
^metric1 ^ 2 - :等于。例如
==metric1 == metric2 - :不等于。例如
!=metric1 != metric2 - 、
>、<、>=:比较操作符<=
关联示例:
第一个示例:计算错误率。
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))
这个查询计算错误率。分子是所有 5xx 错误的速率,分母是所有请求的速率。
第二个示例:计算 CPU 使用率。
100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
这个查询计算 CPU 使用率。CPU 使用率 = 100 - 空闲率。
第三个示例:计算请求成功率。
sum(rate(http_requests_total{status=~"2.."}[5m])) / sum(rate(http_requests_total[5m])) * 100
这个查询计算请求成功率。分子是所有 2xx 成功的速率,分母是所有请求的速率,然后乘以 100 转换为百分比。
这就是多指标关联。
PromQL 子查询
什么是子查询? 子查询是在主查询内部嵌套的查询。例如嵌套聚合、嵌套时间范围、嵌套函数。
子查询语法是什么?
<查询>[<时间范围>:<分辨率>]
例如:
rate(http_requests_total[5m])[1h:1m]子查询示例:
第一个示例:计算 1 小时内的平均速率。
avg_over_time(rate(http_requests_total[5m])[1h:1m])
这个查询计算最近 1 小时内的平均速率。使用
avg_over_time()第二个示例:计算 1 小时内的最大速率。
max_over_time(rate(http_requests_total[5m])[1h:1m])
这个查询计算最近 1 小时内的最大速率。使用
max_over_time()第三个示例:计算 1 小时内的最小速率。
min_over_time(rate(http_requests_total[5m])[1h:1m])
这个查询计算最近 1 小时内的最小速率。使用
min_over_time()这就是子查询。
PromQL 标签操作
什么是标签操作? 在 PromQL 中,可以对标签进行操作。例如标签匹配、标签替换、标签连接、标签删除。
PromQL 支持哪些标签操作函数呢?
- :替换标签。替换标签的名称或值。
label_replace() - :连接标签。将多个标签连接为一个新标签。
label_join()
标签操作示例:
第一个示例:替换标签名称。
label_replace( http_requests_total, "method_new", "$1", "method", "(.*)" )
这个查询将
methodmethod_new第二个示例:连接标签。
label_join( http_requests_total, "service_instance", "-", "service", "instance" )
这个查询将
serviceinstanceservice_instance-第三个示例:删除标签。
http_requests_total without (instance, job)
这个查询删除
instancejobwithout这就是标签操作。
PromQL 常用查询模式
PromQL 有哪些常用查询模式呢?
第一个模式:计算速率。
rate(metric[5m])
这个模式用于计算指标的速率。例如每秒请求数、每秒错误数。
第二个模式:计算增量。
increase(metric[1h])
这个模式用于计算指标的增量。例如最近 1 小时的请求增量。
第三个模式:计算分位数。
histogram_quantile(0.95, sum(rate(metric_bucket[5m])) by (le))
这个模式用于计算分位数。例如 P95 延迟、P99 延迟。
第四个模式:计算比率。
sum(rate(metric1[5m])) / sum(rate(metric2[5m]))
这个模式用于计算比率。例如错误率、成功率。
第五个模式:过滤和聚合。
sum(metric{label="value"}) by (group)
这个模式用于过滤和聚合。例如按标签过滤,然后按组聚合。
模式总结: 这些是 PromQL 的常用查询模式。掌握这些模式,可以大大提高查询效率。
这就是常用查询模式。
本节小结
在本节中,我们学习了 PromQL 高级查询:
第一个是多指标关联。 使用操作符关联多个指标。例如计算比率、比较不同指标。
第二个是子查询。 在主查询内部嵌套查询。例如嵌套聚合、嵌套时间范围。
第三个是标签操作。 替换、连接、删除标签。例如
label_replace()label_join()第四个是常用查询模式。 速率、分位数、比率、过滤聚合。这些是 PromQL 的常用模式。
高级查询技巧: 多指标关联、子查询、标签操作、查询模式。这些技巧可以组合使用,构建更复杂、更强大的查询。
这就是 PromQL 高级查询。掌握这些技巧,可以大大提高查询效率。
在下一节,我们将学习使用 Docker Compose 部署 Prometheus。学习如何容器化部署 Prometheus,让部署更简单、更灵活。