prometheus_python 检测 - 直方图中的分桶

prometheus_python instrumentation - Bucketing in histogram

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

预期行为

我经历了 code 中的分桶逻辑 我期待一个响应时间预设桶的直方图。我为 1,3,5,10,Inf(大于 10s)定义了桶(即小于或等于 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.1s 的位置和方式。

其他详情:

python - prometheus 用于多进程模式

版本信息:

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

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

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