繁体   English   中英

Prometheus查询pod memory使用性能的分位数

[英]Prometheus query quantile of pod memory usage performance

我想获得上次 x 次我的 pod 的 0.95 个百分位数 memory 使用情况。 但是,如果我使用“大”(7 / 10d)范围,此查询开始花费的时间太长。

我现在使用的查询是:

quantile_over_time(0.95, container_memory_usage_bytes[10d])

大约需要 100 秒才能完成

为了简洁起见,我删除了额外的命名空间过滤器

我可以采取哪些步骤来提高此查询的性能? (除了把机器做大)

我考虑过每 x 次(假设 30 分钟)和 label 计算 0.95 个百分位数p95_memory_usage并在查询中使用p95_memory_usage而不是container_memory_usage_bytes ,这样我就可以将查询必须通过的点数减少到 go。

但是,这不会扭曲价值观吗?

正如您已经观察到的,总计分位数(随着时间的推移或其他方式)并没有真正起作用。

您可以尝试使用记录规则建立一段时间内内存使用情况的直方图,看起来像一个“真实的”普罗米修斯直方图(由_bucket_count_sum指标组成),尽管这样做可能很乏味。 就像是:

- record: container_memory_usage_bytes_bucket
  labels:
    le: 100000.0
  expr: |
    container_memory_usage_bytes > bool 100000.0
      +
    (
      container_memory_usage_bytes_bucket{le="100000.0"}
        or ignoring(le)
      container_memory_usage_bytes * 0
    )

对您感兴趣的所有存储桶大小重复上述步骤,然后添加_count_sum指标。

直方图可以聚合(随时间推移或其他方式)而不会出现问题,因此您可以使用第二组记录规则,以较低的分辨率(例如每小时或每天增加,每小时或每天分辨率)计算直方图指标的增加。 最后,您可以在低分辨率直方图(比原始时间序列少的样本)上使用histogram_quantile来计算分位数。

不过,这需要进行大量工作,并且会有一些缺点:您只会每小时/每天对分位数进行一次更新,而准确性可能会更低,具体取决于您定义的直方图桶数。

否则(这只是在写完上述所有内容后才出现的),您可以定义一个以较低分辨率(例如,每小时一次)运行的记录规则,并记录container_memory_usage_bytes指标的当前值。 然后,您可以继续在此较低分辨率指标上使用quantile_over_time 显然,您将失去精度(因为您丢弃了大量样本),并且分位数仅每小时更新一次,但这要简单得多。 您只需要等待10天,看看结果是否足够接近。 (o:

quantile_over_time(0.95, container_memory_usage_bytes[10d])查询可能会很慢,因为它需要考虑过去 10 天所有container_memory_usage_bytes时间序列的所有原始样本。 要处理的样本数量可能非常大。 可以使用以下查询进行估算:

sum(count_over_time(container_memory_usage_bytes[10d]))

请注意,如果quantile_over_time(...)查询用于在 Grafana 中构建图形(又名range query而不是instant query ),则必须乘以从sum(count_over_time(...))返回的原始样本数通过 Grafana 图上的点数,因为 Prometheus 对显示图上的每个点单独执行quantile_over_time(...) 通常 Grafana 需要大约 1000 个点来构建平滑图。 因此,从sum(count_over_time(...))返回的数字必须乘以 1000,以估计 Prometheus 需要处理以构建quantile_over_time(...)图的原始样本数。 请参阅本文中的更多详细信息。

减少查询时长有以下解决方案:

  • 添加更具体的 label 过滤器以减少所选时间序列的数量,从而减少要处理的原始样本的数量。
  • 减少方括号中的 lookbehind window。 例如,将[10d]更改为[1d]可将要处理的原始样本数量减少 10 倍。
  • 使用记录规则来计算粗粒度的结果。
  • 尝试使用其他与 Prometheus 兼容的系统,这些系统可能会以更快的速度处理繁重的查询。 例如,尝试VictoriaMetrics

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM