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 用于多进程模式
版本信息:
- Python - 2.7
- prometheus_client [Python] - 0.0.21
le
代表小于或等于,因此这是预期的行为。 histogram_quantile
函数会自动处理此问题,因此您无需担心此实现细节。
之所以采用这种方式,是因为如果直方图的桶太多,您可以安全地将它们放在摄取端。
我正在尝试使用 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 用于多进程模式
版本信息:
- Python - 2.7
- prometheus_client [Python] - 0.0.21
le
代表小于或等于,因此这是预期的行为。 histogram_quantile
函数会自动处理此问题,因此您无需担心此实现细节。
之所以采用这种方式,是因为如果直方图的桶太多,您可以安全地将它们放在摄取端。