Kubernetes 中拥有多个 Prometheus 实例意味着什么

Kubernetes 中拥有多个 Prometheus 实例意味着什么

假设我正在使用卷来保存我的 Prometheus 数据,我想知道是否可以运行多个实例以实现高可用性。

我相信只有一个 Prometheus 实例必须负责写入 tsdb 系列,并且拥有多个实例可能会导致竞争条件并损坏数据(我认为它的 tsdb 具有锁文件的原因一定就是这样)。

因此,问题是,我可以运行多个 Prometheus 实例,并且都指向相同的数据并将其用作高可用性选项吗?或者,是否有其他方法可以在配置更改导致的滚动重启期间保持 Prometheus 始终可用?

答案1

您还可以并行运行 Prometheus 的两个实例/副本,分别抓取目标并独立保存数据,然后使用另一个服务Thanos 查询在它们前面进行查询并对结果进行重复数据删除。

此设置涉及更多活动部件,但为您提供了更大的灵活性来实现数据可用性和服务可靠性目标。

答案2

回答您的问题,拥有多个指向相同数据并使用它的非高可用性 Prometheus 实例并不是一个高可用性选项。在 pod/节点重新启动期间,其他实例无法获得数据,这是没用的。如果您正在考虑拥有多个 Prometheus 实例并使其具有高可用性。我建议您使用 Prometheus 联合。这也是一种简单扩展的解决方案,其中一个主服务器从不同数据中心的不同服务器收集指标。

设置此架构非常简单。主服务器部署了“目标”,其中包含从属 Prometheus 服务器 URL 列表,如下所示:

scrape_configs:
      - job_name: federated_prometheus
        honor_labels: true
        metrics_path: /federate
        params:
          match[]:
          - '{job="the-prom-job"}'
        static_configs:
          - targets:
            - prometheus-slave1:9090
            - prometheus-slave2:9090

配置中的 match[] 参数指示 Prometheus 累积并存储特定作业的所有从属指标。您也可以将其设置为正则表达式:{__name__=~”^job:.*”}。这将从与表达式定义匹配的几个不同作业中收集指标。

Prometheus 从属服务器应具有以下配置:

global:
  external_labels:
    slave: 1
  relabel_configs:
  - source_labels: [_prometheus_slave]
    action: keep
    regex: slave1

当数据量不断增长时,存储驱动程序应该能够处理增长,以提供可靠的历史数据。对此的简单解决方案是使用云弹性存储服务(例如 AWS S3 或 Google Storage)作为存储后端。这些服务为需要维护大量数据的 Prometheus 服务器(例如连接到大型 Kubernetes 集群或具有一个监控端点的多个集群的服务器)提供无限容量。

Prometheus 本身提供了一种高级存储管理解决方案 - 通过快照实现存储可扩展性。通过对 Prometheus 数据进行快照并使用存储保留配置删除数据,用户可以实时获取超过 X 天或 X 个月的数据,或大于特定大小的数据。然后,他们还可以将旧数据存储在单独的磁盘上并按需提供。

请看一下:普罗米修斯联邦kubernetes-扩展-prometheus

相关内容