【问题标题】:prometheus_python instrumentation - Bucketing in histogramprometheus_python 仪器 - 直方图中的分桶
【发布时间】:2017-10-19 10:33:20
【问题描述】:

我正在尝试使用 python-prometheus 库检测 API 运行状况。我按照documentation 中的指示使用普罗米修斯直方图获取 API 响应时间,并进行了 http 指标导出

预期行为

我查看了code 中的分桶逻辑,我期待一个预设响应时间桶的直方图。我为1,3,5,10,Inf(大于10s)定义了bucket(即小于等于1s/3s/5s)

因此,如果我只有 一个 请求花费了 2s,则 3s 存储桶的频率为 1,其他存储桶为零。

关于分桶的代码片段

def observe(self, amount):
        '''Observe the given amount.'''
        self._sum.inc(amount)
        for i, bound in enumerate(self._upper_bounds):
            if amount <= bound:
                self._buckets[i].inc(1)
                break

我认为 break 确保对一个实例只进行一次分桶。

响应时间:

之前

之后

对于一个耗时 3.1 秒的示例请求,如果我们可以从前后减去延迟总和,

5s、10s 和 Inf 存储桶也在更新。我正在寻找 >= 3.1 的存储桶的更新位置和方式。

其他细节:

python - prometheus 用于多进程模式

版本信息:

  1. Python - 2.7
  2. prometheus_client [Python] - 0.0.21

【问题讨论】:

    标签: python prometheus


    【解决方案1】:

    le 代表小于或等于,所以这是预期的行为。 histogram_quantile 函数会自动处理此问题,因此您无需担心此实现细节。

    采用这种方式的原因是,如果直方图有太多的桶,您可以安全地将它们放在摄取端。

    【讨论】:

    • 感谢@brian-brazil 的评论。如果我们深入研究一下代码,看起来每个条目似乎只被分桶一次。让我尝试用代码 sn-p 更新问题。
    • 我知道行为是“le”,所以它按预期工作。我很好奇这部分是由哪个代码完成的。我要突出显示的一个,只填满一个桶。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多