prometheus_python检测 - 直方图中的Bucketing

时间:2017-10-19 10:33:21

标签: python prometheus

我正在尝试使用python-prometheus lib来检测API运行状况。我按照documentation中的指示使用prometheus直方图来处理API响应时间并执行指标的http导出

预期行为

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

因此,如果我只有一个请求占用2秒,则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确保对实例只进行一次bucketing。

回应时间:

之前

enter image description here

enter image description here

如果我们可以减去之前和之后的延迟总和,则需要3.1s的样本请求,

5s,10s和Inf桶也在不断更新。我希望找到桶&gt; = 3.1s的更新位置和方式。

其他细节:

python - prometheus用于多进程模式

版本信息:

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

1 个答案:

答案 0 :(得分:0)

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

这个原因就是这样,如果直方图有太多的桶,你可以安全地将它们放在摄取端。