我正在尝试使用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。
回应时间:
之前
后
如果我们可以减去之前和之后的延迟总和,则需要3.1s的样本请求,
5s,10s和Inf桶也在不断更新。我希望找到桶&gt; = 3.1s的更新位置和方式。
其他细节:
python - prometheus用于多进程模式
版本信息:
答案 0 :(得分:0)
le
代表小于或等于,所以这是预期的行为。 histogram_quantile
函数会自动处理此问题,因此您不必担心此实现细节。
这个原因就是这样,如果直方图有太多的桶,你可以安全地将它们放在摄取端。