【问题标题】:How to safegaurd prometheus data?如何保护普罗米修斯数据?
【发布时间】:2019-11-16 16:04:13
【问题描述】:

我们正在使用 Prometheus 进行指标收集。 Prometheus 将被部署为一个容器,它将从各种来源收集指标并将数据存储在本地机器(容器运行的地方)中。如果保存容器的节点发生故障,我们将与该节点一起丢失指标,因为 Prometheus 将所有指标存储在该本地机器中。 Kubernetes 将检测容器故障并在健康节点中跨越该容器,但我们在旧节点中丢失了数据。 ​​

​为了解决这个问题,我们也提出了两个想法

  1. 我们必须将整个 Prometheus 与 Kubernetes 分离。

    • 我们需要确保 Prometheus 服务器和 Prometheus 服务器数据的高可用性。此外,我们需要确保 Prometheus 的身份验证。这里有一些安全问题,因为默认情况下 Prometheus 不附带身份验证prometheus-basic-auth,我们必须使用反向代理来处理身份验证。 Prometheus 需要与 Kubernetes 内部组件通信,因此我们也需要为此制定一种安全的方式。
  2. 我们必须单独解耦存储,例如:NFS 类协议(Kubernetes 术语中的 PV)。

    • ​我们需要确保 Prometheus 的数据具有高可用性。需要保护 NFS。

我们应该使用哪一个?

如果存在任何其他行业解决方案,也请分享。如果上述任何一种有未提及的副作用,请告诉我。

【问题讨论】:

  • 使用 PV 完全没问题。
  • @Butuzov 对于 PV,您会建议哪种类型的 NAS。

标签: docker kubernetes prometheus high-availability


【解决方案1】:

短期答案使用 PV,但可能不是 NFS,您不需要多个编写器。一个简单的网络块设备(EBS、GCPDisk 等)就可以了。从长远来看,HA Prometheus 是一个复杂的话题,请查看 Thanos 项目以获得一些想法和技术。此外,Grafana Labs 的人们一直在尝试一些新的 HA 布局。预计完整的 HA Prometheus 将是一个非常重要的项目,需要您深入了解内部结构。

【讨论】:

    【解决方案2】:

    除了将 prometheus 数据存储为 Persistence Volume(PV) 之外,还有另一种选择。您可以使用exporters by prometheus,如 here 所述。这些导出器获取抓取的数据并将它们存储在一些外部数据库中,例如弹性搜索或 mysql,并且可以在前一个 prometheus 实例崩溃的情况下使用另一个 prometheus 实例。

    【讨论】:

    • 这不是导出器所做的,它们是 Prometheus 抓取的数据馈送,用于摄取数据。也许您正在考虑远程写入系统。
    【解决方案3】:

    Prometheus 可以通过 remote_write API 将数据复制到远程存储。这意味着数据不会在 k8s 集群中的 Prometheus pod 重启时丢失,因为它已经复制到远程存储。见how to set up remote storage in Prometheus。此示例使用 VictoriaMetrics - Prometheus 的经济高效的开源远程存储,具有以下功能:

    • PromQL support
    • 资源使用率低 - RAM、CPU、磁盘、网络
    • 垂直和水平缩放

    我不推荐 Thanos,因为它不能防止 Prometheus pod 重新启动时最近 2 小时内的数据丢失。详情请见this article

    【讨论】:

      猜你喜欢
      • 2015-12-01
      • 1970-01-01
      • 2022-01-22
      • 2017-09-03
      • 1970-01-01
      • 2022-10-17
      • 2022-12-02
      • 2022-12-17
      • 2019-04-11
      相关资源
      最近更新 更多