配置 Grafana Mimir 高可用性去重
您可以拥有多个抓取相同指标以实现冗余的 Prometheus 实例。Grafana Mimir 已经执行冗余复制,因此您无需重复摄取相同的数据。在 Grafana Mimir 中,您可以对从高可用性(HA)Prometheus 实例对接收的数据进行去重。
假设有两个团队,每个团队都运行自己的 Prometheus 实例来监控不同的服务:Prometheus team-1
和 Prometheus team-2
。如果这些团队运行的是 Prometheus HA 对,则单个 Prometheus 实例将是 team-1.a
和 team-1.b
,以及 team-2.a
和 team-2.b
。
Grafana Mimir 只会从 team-1.a
或 team-1.b
中摄取数据,并且只从 team-2.a
或 team-2.b
中摄取数据。它通过为每个 Prometheus 服务器选举一个领导者副本(leader replica)来实现这一点。例如,对于 team-1
,领导者副本将是 team-1.a
。只要 team-1.a
是领导者,team-1.b
发送的样本就会被丢弃。如果 Grafana Mimir 在短时间内(默认为 30 秒)没有看到来自 team-1.a
的新样本,它会将领导者切换到 team-1.b
。
如果 team-1.a
宕机超过 30 秒,Grafana Mimir 的 HA 样本处理机制将进行切换,并将 team-1.b
选举为领导者。故障超时确保在故障转移到另一个副本之前不会丢失太多数据。
注意
在默认抓取周期为 15 秒且 Grafana Mimir 中的超时设置为默认值的情况下,发生领导者选举故障转移时,您可能只会丢失单个抓取周期的数据。
对于使用
rate()
函数的任何查询,请将速率时间间隔设置为至少是抓取周期的四倍,以便考虑到这些故障转移场景。例如,对于默认抓取周期 15 秒,请使用至少 1 分钟的速率时间间隔。
Distributor 高可用性(HA)跟踪器
distributor 包含一个高可用性(HA)跟踪器。
HA 跟踪器根据每个传入时间序列上预期的 cluster 和 replica 标签对传入样本进行去重。cluster 标签唯一标识给定租户的冗余 Prometheus 服务器集群。replica 标签唯一标识 Prometheus 集群中的副本。如果传入样本来自集群内当前未被选举为领导者的任何副本,则该样本被视为重复样本(并因此被丢弃)。
如果 HA 跟踪器已启用,但传入样本只包含 cluster 和 replica 标签中的一个或都不包含,则这些样本默认会被接受,并且永远不会被去重。
注意:出于性能原因,HA 跟踪器仅检查请求中第一个时间序列的 cluster 和 replica 标签,以确定请求中的所有时间序列是否应进行去重。这假定请求内的所有时间序列都具有相同的 cluster 和 replica 标签,在使用 Prometheus 配置了 external labels 时通常是这样。如果您有非标准的 Prometheus 设置(例如,您正在使用 Prometheus federation 或在中间有一个指标代理),请确保满足此要求。
配置
本节包含有关如何配置 Prometheus 和 Grafana Mimir 的信息。
如何配置 Prometheus
要配置 Prometheus,请为每个 Prometheus 服务器设置两个标识符,一个用于集群(例如,team-1
或 team-2
),一个用于标识集群中的副本(例如,a
或 b
)。最简单的方法是设置 external labels。默认标签是 cluster
和 __replica__
。
以下示例展示了如何在 Prometheus 中设置标识符
global:
external_labels:
cluster: prom-team1
__replica__: replica1
和
global:
external_labels:
cluster: prom-team1
__replica__: replica2
注意
上述标签是 external labels,与
remote_write
配置无关。
这两个标签名称可以在 Grafana Mimir 中按租户进行配置。例如,如果某个集群的标签名称被某些工作负载使用,则可以将另一个集群的标签名称设置为其他名称,以唯一标识第二个集群。
设置 replica 标签,以便每个 Prometheus 集群中该标签的值是唯一的。
注意
Grafana Mimir 在摄取数据时会丢弃此标签,但保留 cluster 标签。这样,您的时间序列就不会随着副本的改变而改变。
如何配置 Grafana Mimir
所需的最低配置如下
- 启用 HA 跟踪器。
- 配置 HA 跟踪器 KV 存储。
- 为每个集群及其副本配置预期的标签名称。
启用 HA 跟踪器
要启用 HA 跟踪器功能,请在 distributor 中设置 -distributor.ha-tracker.enable=true
CLI 标志(或其对应的 YAML 配置选项)。
接下来,决定是要为所有租户启用它,还是仅为部分租户启用。要为所有租户启用,请设置 -distributor.ha-tracker.enable-for-all-users=true
。或者,您也可以仅按租户启用 HA 跟踪器,保持默认的 -distributor.ha-tracker.enable-for-all-users=false
,并在运行时配置的 overrides 部分按租户设置 accept_ha_samples
来覆盖。
配置 HA 跟踪器 KV 存储
HA 跟踪器需要一个键值(KV)存储来协调当前哪个副本被选举。HA 跟踪器支持的 KV 存储是 consul
和 etcd
。
注意
不支持
memberlist
。基于 Memberlist 的 KV 存储使用 Gossip 协议传播更新,这对于 HA 跟踪器来说太慢了。
结果可能是不同的 distributor 可能同时看到不同的 Prometheus 服务器被选举为领导者。
以下 CLI 标志(及其各自的 YAML 配置选项)可用于配置 HA 跟踪器 KV 存储
-distributor.ha-tracker.store
:要使用的后端存储,可以是consul
或etcd
。-distributor.ha-tracker.consul.*
:Consul 客户端配置。仅在将consul
定义为后端存储时使用此选项。-distributor.ha-tracker.etcd.*
:etcd 客户端配置。仅在将etcd
定义为后端存储时使用此选项。
为每个 Prometheus 集群和副本配置预期的标签名称
HA 跟踪器会去重包含 cluster 和 replica 标签的传入时间序列。您可以全局配置这些标签的名称,或按租户进行配置。
使用以下 CLI 标志(或其各自的 YAML 配置选项)配置默认的 cluster 和 replica 标签名称
-distributor.ha-tracker.cluster
:该标签的值唯一标识一个 Prometheus HA 集群(默认为cluster
)。-distributor.ha-tracker.replica
:该标签的值唯一标识 HA 集群中的一个 Prometheus 副本(默认为__replica__
)。
注意
可以通过在运行时配置的 overrides 部分设置
ha_cluster_label
和ha_replica_label
,按租户覆盖 HA 标签名称。
配置示例
以下配置示例片段通过 YAML 配置文件为所有租户启用 HA 跟踪器
limits:
accept_ha_samples: true
distributor:
ha_tracker:
enable_ha_tracker: true
kvstore:
[store: <string> | default = "consul"]
[consul | etcd: <config>]
更多信息,请参阅 distributor。HA 跟踪器标志以前缀 -distributor.ha-tracker.*
开头。