首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用promql将两个Prometheus时间序列分组到一个新标签上?

PromQL(Prometheus Query Language)是Prometheus监控系统中用于查询时间序列数据的表达式语言。如果你想将两个Prometheus时间序列分组到一个新标签上,可以使用label_replace函数或者group_left/group_right结合onignoring关键字来实现。

使用label_replace函数

label_replace函数可以用来替换、添加或删除标签。其基本语法如下:

代码语言:txt
复制
label_replace(<input_expr>, <output_label>, <replacement>, <source_label>, <regex>)
  • <input_expr>: 输入的时间序列表达式。
  • <output_label>: 输出的新标签名称。
  • <replacement>: 替换后的值,可以使用正则表达式捕获组。
  • <source_label>: 源标签名称,从中提取值。
  • <regex>: 正则表达式,用于匹配<source_label>的值。

例如,假设你有两个时间序列,一个是http_requests_total{job="api-server"},另一个是http_errors_total{job="api-server"},你想将它们合并到一个新的时间序列中,并添加一个新的标签type来区分请求总数和错误总数:

代码语言:txt
复制
label_replace(http_requests_total{job="api-server"}, "type", "requests", "", "")
+ label_replace(http_errors_total{job="api-server"}, "type", "errors", "", "")

使用group_left/group_right

group_leftgroup_right可以用来合并两个时间序列,并保留左边或右边的所有标签。结合onignoring关键字,可以指定哪些标签用于合并,哪些标签需要忽略。

例如,如果你想合并上述两个时间序列,并保留所有原始标签,同时添加一个新的标签type

代码语言:txt
复制
sum by (job) (
  http_requests_total{job="api-server"} * on(job) group_left(type) {
    http_errors_total{job="api-server"} * on(job) group_left(type) {
      label_replace(http_requests_total{job="api-server"}, "type", "requests", "", "")
    }
  }
) + sum by (job) (
  http_errors_total{job="api-server"} * on(job) group_right(type) {
    http_requests_total{job="api️server"} * on(job) group_right(type) {
      label_replace(http_errors_total{job="api-server"}, "type", "errors", "", "")
    }
  }
)

在这个例子中,我们使用了两次label_replace来为每个时间序列添加type标签,然后使用sum by (job)来合并它们,并通过on(job)指定合并的基础是job标签。

应用场景

这种操作通常用于数据可视化和报警规则中,当你需要将不同类型的数据合并在一起,但又想保持数据的原始上下文时。例如,在监控API服务器的性能时,你可能同时关注请求总数和错误总数,并希望在同一个图表中展示它们。

注意事项

  • 在使用这些函数时,需要注意正则表达式的正确性,以避免错误的替换或匹配。
  • 合并时间序列时要确保它们有共同的标签值,否则可能会导致意外的结果。
  • 在生产环境中使用这些查询之前,建议先在Prometheus的表达式浏览器中进行测试。

如果你在实际应用中遇到了问题,比如合并后的时间序列数据不正确,可能是因为标签不匹配或者正则表达式错误。检查这些方面通常能帮助你找到问题的原因。

更多关于PromQL的信息,可以参考Prometheus官方文档:

如果你需要进一步的帮助,可以提供具体的PromQL查询和遇到的问题,以便进行更详细的分析。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 使用 Prometheus 记录规则优化 PromQL 语句

    Prometheus 作为现在最火的云原生监控工具,它的优秀表现是毋庸置疑的。但是在我们使用过程中,随着时间的推移,存储在 Prometheus 中的监控指标数据越来越多,查询的频率也在不断的增加,当我们用 Grafana 添加更多的 Dashboard 的时候,可能慢慢地会体验到 Grafana 已经无法按时渲染图表,并且偶尔还会出现超时的情况,特别是当我们在长时间汇总大量的指标数据的时候,Prometheus 查询超时的情况可能更多了,这时就需要一种能够类似于后台批处理的机制在后台完成这些复杂运算的计算,对于使用者而言只需要查询这些运算结果即可。Prometheus 提供一种记录规则(Recording Rule) 来支持这种后台计算的方式,可以实现对复杂查询的 PromQL 语句的性能优化,提高查询效率。

    04
    领券