【问题标题】:How to calculate the persistent volume size needed for prometheus server pod in K8S cluster?如何计算 K8S 集群中 prometheus server pod 所需的持久化卷大小?
【发布时间】:2019-10-11 06:45:09
【问题描述】:

我将 Prometheus helm chart 安装到 Kubernetes 集群进行监控。 默认情况下,

  • prometheus 服务器的持久卷大小定义为 8Gi。
  • Prometheus 服务器会将指标存储在此卷中 15 天(保留期)

在部署图表几天后,prometheus 服务器 pod 进入了 crashloopbackoff 状态。 从 pod 日志中查到的原因是:

level=error ts=2019-10-09T11:03:10.802847347Z caller=main.go:625 err="opening storage failed: zero-pad torn page: write /data/wal/00000429: no space left on device"

这意味着磁盘(永久卷)中没有可用空间来保存数据。 所以我清除了卷的现有数据并暂时修复了这个问题。

什么是正确的解决方案?

Prometheus documentation 说:

要规划一台 Prometheus 服务器的容量,可以使用粗略的公式:

needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample

有人可以解释一下如何故意使用这个公式吗?

为什么 15 天的保留期 8Gi 大小不够?

编辑:

默认 8Gi 空间在 6 天后 100% 使用。

【问题讨论】:

    标签: kubernetes prometheus persistent-storage


    【解决方案1】:

    15 天大约是 130 万秒。让我们高估每个样本 8 个字节。所以每个指标大约需要 10mb。所以 8gb 可以让你存储 800 个指标。你可能有更多。将您要存储的系列数乘以 10,这就是您需要的兆字节数。粗略地说,这至少会让你得到正确的数量级。

    【讨论】:

    • 谢谢。需要存储的系列数量是什么意思?
    • 每个样本2字节通常是保守估计,经常引用1.6ish。
    • 此外,您通常不会以 1 秒的间隔刮掉所有内容,因此可能会高估 10 倍。但足够近,可以有一些安全室:)
    【解决方案2】:

    从 Prometheus 2.7 开始,他们引入了一个新标志来管理保留。来自文档:

    --storage.tsdb.retention.size: [实验性] 这决定了存储块可以使用的最大字节数(请注意,这不包括 WAL 大小,这可能很大)。最旧的数据将首先被删除。默认为 0 或禁用。此标志是实验性的,可以在未来的版本中更改。支持的单位:KB、MB、GB、PB。例如:“512MB”

    您可以在部署配置中设置此参数选项,以根据大小而不是时间来限制保留。

    由于它还处于实验阶段,根据this 来源,为 WAL 留出空间和一个最大大小的块(这是保留时间的 10% 和一个月中较小的一个)是安全的。

    【讨论】:

      猜你喜欢
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 2019-07-18
      • 1970-01-01
      • 2021-03-03
      • 1970-01-01
      • 2019-04-13
      相关资源
      最近更新 更多