如何在 Prometheus 中正确检测区域和环境信息?

How do I instrument region and environment information correctly in Prometheus?

我有一个应用程序,我 运行 每个 AWS 区域都有一个此应用程序的实例。 我正在尝试使用 Prometheus 指标客户端检测应用程序代码,并将收集的指标公开给 /metrics 端点。有一个中央服务器将跨所有区域抓取 /metrics 个端点,并将它们存储在中央时间序列数据库中。

假设我定义了一个名为:http_responses_total 的指标,那么我想知道它在所有区域的聚合值以及各个区域值。 我如何存储此 region 信息(可能是 13 个区域中的任何一个)和 env 信息(可能是 devtestprod 以及指标)这样我就可以根据 regionenv?

对指标进行切片和切块

我找到了一些方法来做到这一点,但不确定一般是如何完成的,因为这似乎是一个很常见的场景:

我是普罗米修斯的新手。有人可以建议我应该如何存储此 regionenv 信息吗?还有其他更好的方法吗?

所有建议的选项都有效,但都有缺点。

first 选项(具有 envregion 应用程序公开的每个指标)易于实施但难以维护。最终有人会忘记这些,为发生未被观察到的故障打开了可能性。除此之外,您可能无法将这些标签添加到其他出口商,由其他人编写。最后,如果你必须处理数百万的时间序列,更多的纯文本数据意味着更多的流量。

third 选项(将这些标签存储在单独的指标中)将使编写和理解查询变得相当困难。以这个为例:

sum by(instance) (node_arp_entries) and on(instance) node_exporter_build_info{version="0.17.0"}

它为 node-exporter version="0.17.0" 的实例计算 node_arp_entriessum。更具体地说,它计算每个实例的总和,然后删除版本错误的那些,但你明白了。

我会选择 second 选项(使用 Prometheus 添加这些标签作为抓取配置的一部分)。为了省事,请考虑以下监控设置:

Datacener Prometheus Regional Prometheus Global Prometheus
1. Collects metrics from local instances. 2. Adds dc label to each metric. 3. Pushes the data into the regional Prometheus -> 1. Collects data on datacenter scale. 2. Adds region label to all metrics. 3. Pushes the data into the global instance -> Simply collects and stores the data on global scale

这是您在 Google 规模上需要的那种设置,但关键是简单。每个标签的来源和原因一目了然。这种方法要求您使 Prometheus 配置稍微复杂一些,并且您拥有的 Prometheus 实例越少,您需要的抓取配置就越多。 总的来说,我认为这个选项优于其他选项。