「译文」如何使用 PromQL join 来更有效地查询大规模的 Prometheus 指标

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 「译文」如何使用 PromQL join 来更有效地查询大规模的 Prometheus 指标

👉️URL: https://grafana.com/blog/2021/08/04/how-to-use-promql-joins-for-more-effective-queries-of-prometheus-metrics-at-scale/

📝Description:

我们帮助一个强大的用户使用 PromQL 连接消除了对 18,000 条单独规则的需求。下面是方法。

我们最近听说一个客户,一个 Prometheus 的高级用户,正在为其指标处理 18,000 条单独的规则,因为其设置涉及为每个生成的指标创建一个单独的规则组。肯定有一个更好、更有效的方法来处理这种规模的指标?事实上,我们确实想出了一个解决方案,这篇博文将告诉你,你也可能从中受益。

我们要做的是

该组织正在为每个生成的指标创建一个单独的规则组。

比如说。

groups:
  - name: slo_metric
    expr: count(api_response_latency_ms{labelone="xyz", labeltwo="abc"} > 100)
    labels:
      reference_label: xyzabc123
YAML

上面的记录规则的原因是,客户想把 reference_label 添加到指标的汇总版本中。参考标签对应的是每个系列上已经存在的两个预先存在的标签。目前的问题是如何在不改变基础系列的情况下,用所需的相关参考标签创建新的聚合系列?

在想出一个替代方案时,我们考虑到了以下几点。

Info metrics

普罗米修斯中的信息度量是一种不对测量进行编码的度量,而是用来对高基数的标签值进行编码。一个信息度量的例子是 node_uname_info

node_uname_info{cluster="dev-us-central-0", domainname="(none)", instance="localhost", job="default/node-exporter", machine="x86_64", namespace="default", nodename="dev-host-1", release="4.19.150+", sysname="Linux", version="#1 SMP Tue Nov 24 07:54:23 PST 2020"} 1
PROMQL

上述指标是由 node exporter 暴露的,是一个测量值总是设置为 1 的仪表。尽管这个指标本身没有什么用处,但它与其他指标一起使用会很有用。例如,如果你想通过操作系统的 release 来确定 CPU 闲置时间,你可以使用查询:

sum by (release) (rate(node_cpu_seconds_total{mode="idle"}[5m]) * on (instance) group_left(release) node_uname_info)
PROMQL

你可能有的下一个问题是,你如何能够轻松地创建一个具有正确标签值的信息指标,并迅速将其刮入 Prometheus。你总是可以用你想要的指标来创建一个应用程序,但还有一个更简单的方法。你可以利用 textfile_collector 的优势。

Textfile exporter

Prometheus node exporter 和 Grafana agent 支持 textfile collector。这允许代理解析和收集包含 Prometheus 论述格式 度量的文本文件。这个功能对于快速生成包含对 PromQL 查询有用的元数据的静态度量是很重要的。

利用上述功能,你可以创建包含独特标签集的信息指标,这些标签可以在 PromQL join 查询中与其他指标一起使用。你所需要做的就是创建一个包含你所需要的信息指标的文件,并将它们暴露给 Prometheus。你可以手动或脚本来做这件事。

关于一些可用于生成包含旨在由 textfile collector 收集的指标的文件的脚本示例,请参见 Prometheus 社区脚本库

Joins in PromQL

PromQL 支持将两个度量连接在一起的能力。你可以从一个度量中附加一个标签集,并在查询时将其附加到另一个度量中。这在 Prometheus 规则评估中很有用,因为它可以让你通过附加另一个信息度量的标签为一个系列生成一个新的度量。

关于连接运算符的更多信息,请参阅 Prometheus 查询运算符的文档 ,并查看这些博客文章。

把所有的东西集中起来

你可以重新利用生成 18000 个规则组的工具,转而生成一个包含 sli_info 指标的普罗米修斯指标文件。这个指标将包含 seal reference 和 sealID、检查标识(checkID)以及任何其他它适当映射到的标签。

接下来,使用 Grafana agent 内置的 textfile collector 收集生成的度量,并将其写入 Cortex。

为每个指标运行一条规则,使用 PromQL join 将适当的参考标签注入生成的系列中。

例如,基于上述规则组:

groups:
  - name: slo_metric
    expr: count(api_response_latency{labelone="xyz", labeltwo="abc"} > 100)
    labels:
      reference_label: xyzabc
YAML

你将创建以下信息指标文件:

sli_info{labelone="xyz", labeltwo="abc", reference_label="xyzabz"} 1
ROUTEROS

这个文件将被 Grafana Agent 收集。然后在 Cortex 中可以使用以下规则组:

groups:
  - name: slo_metric
    expr: count by (reference_label) ((api_response_latency * on (labelone,labeltwo) group_left(reference_label) sli_info > 100)
YAML

这将对具有这些标签名称和相关映射的每个指标起作用。

瞧!你得到了与现有规则组相同的结果,而没有 18000 个单独的规则。你得到了与现有规则组相同的结果,而没有 18,000 条单独的规则。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
相关文章
|
6月前
|
存储 JSON Prometheus
如何精简 Prometheus 的指标和存储占用
如何精简 Prometheus 的指标和存储占用
|
6月前
|
存储 Prometheus Kubernetes
「译文」通过 Relabel 减少 Prometheus 指标的使用量
「译文」通过 Relabel 减少 Prometheus 指标的使用量
|
3月前
|
Prometheus 监控 Cloud Native
基于prometheus的微服务指标监控
基于prometheus的微服务指标监控
|
4月前
|
测试技术 UED 存储
SLS Prometheus存储问题之在使用内置降采样时,SLS自动选择适配的指标库该如何解决
SLS Prometheus存储问题之在使用内置降采样时,SLS自动选择适配的指标库该如何解决
|
4月前
|
Prometheus 监控 Cloud Native
Prometheus结合Consul采集多个MySQL实例的监控指标
将 Prometheus 与 Consul 结合使用,实现对多个 MySQL 实例的自动发现与监控,不仅提高了监控的效率和准确性,也为管理动态扩缩容的数据库环境提供了强大的支持。通过细致配置每一部分,业务可以获得关键的性能指标和运行健康状况的即时反馈,进而优化资源配置,提高系统的稳定性和可用性。
162 3
|
3月前
|
Prometheus 监控 Cloud Native
Gin 集成 prometheus 客户端实现注册和暴露指标
Gin 集成 prometheus 客户端实现注册和暴露指标
172 0
|
6月前
|
存储 Prometheus Cloud Native
「译文」Prometheus 查询语言 PromQL 简介
「译文」Prometheus 查询语言 PromQL 简介
|
6月前
|
Prometheus 运维 监控
统一观测丨使用 Prometheus 监控云原生网关,我们该关注哪些指标?
MSE 云原生网关默认提供了丰富的 Metrics 指标大盘,配合阿里云 Prometheus 监控提供开箱即用的完整可观测性能力,能够帮助用户快捷、高效的搭建自身的微服务网关与对应的可观测体系。
298 6
|
6月前
|
Prometheus 监控 Cloud Native
统一观测丨如何使用Prometheus 实现性能压测指标可观测
简介:本篇阐述如何使用 Prometheus 实现性能压测 Metrics 的可观测性。
212 0
|
20天前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
108 3