03.7PromQL高级查询

分类: Prometheus安装与配置

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 小时内的速率,分辨率为 1 分钟。

子查询示例:

第一个示例:计算 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",
  "(.*)"
)

这个查询将

method
标签替换为
method_new
标签。

第二个示例:连接标签。

label_join(
  http_requests_total,
  "service_instance",
  "-",
  "service",
  "instance"
)

这个查询将

service
instance
标签连接为
service_instance
标签,使用
-
作为分隔符。

第三个示例:删除标签。

http_requests_total without (instance, job)

这个查询删除

instance
job
标签。使用
without
关键字。

这就是标签操作。

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,让部署更简单、更灵活。