菜单
文档面包屑箭头 Grafana Mimir面包屑箭头 配置面包屑箭头 高可用性去重
开源

配置 Grafana Mimir 高可用性去重

您可以拥有多个抓取相同指标以实现冗余的 Prometheus 实例。Grafana Mimir 已经执行冗余复制,因此您无需重复摄取相同的数据。在 Grafana Mimir 中,您可以对从高可用性(HA)Prometheus 实例对接收的数据进行去重。

假设有两个团队,每个团队都运行自己的 Prometheus 实例来监控不同的服务:Prometheus team-1 和 Prometheus team-2。如果这些团队运行的是 Prometheus HA 对,则单个 Prometheus 实例将是 team-1.ateam-1.b,以及 team-2.ateam-2.b

Grafana Mimir 只会从 team-1.ateam-1.b 中摄取数据,并且只从 team-2.ateam-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-1team-2),一个用于标识集群中的副本(例如,ab)。最简单的方法是设置 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

所需的最低配置如下

  1. 启用 HA 跟踪器。
  2. 配置 HA 跟踪器 KV 存储。
  3. 为每个集群及其副本配置预期的标签名称。

启用 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 存储是 consuletcd

注意

不支持 memberlist

基于 Memberlist 的 KV 存储使用 Gossip 协议传播更新,这对于 HA 跟踪器来说太慢了。

结果可能是不同的 distributor 可能同时看到不同的 Prometheus 服务器被选举为领导者。

以下 CLI 标志(及其各自的 YAML 配置选项)可用于配置 HA 跟踪器 KV 存储

  • -distributor.ha-tracker.store:要使用的后端存储,可以是 consuletcd
  • -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_labelha_replica_label,按租户覆盖 HA 标签名称。

配置示例

以下配置示例片段通过 YAML 配置文件为所有租户启用 HA 跟踪器

yaml
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.* 开头。