在 Prometheus 中,Summary
类型是用于跟踪事件的耗时(或其他数值型事件的大小),同时它会自动提供滑动时间窗口的百分位数。这使得 Summary
非常适合于记录请求的响应时间或事务的处理时间等指标。以下是一些 Summary
类型的常用方法:
常用的 Summary
方法
-
observe(value)
:- 用于记录一个单独的观测值。这是
Summary
类型最核心的方法,用来将一个数值添加到Summary
的分布中。比如,每次HTTP请求完成后,记录该请求的耗时。
- 用于记录一个单独的观测值。这是
-
time()
:- 与
Gauge
的time()
类似,这也是一个上下文管理器,用于自动测量代码块的执行时间并将其记录到Summary
。这个方法常用于自动记录处理请求等耗时操作的时间。
- 与
示例代码使用 Summary
方法
from flask import Flask
from prometheus_client import Summary
import time
app = Flask(__name__)
REQUEST_DURATION = Summary('request_duration', 'Time spent processing request')
@app.route('/')
def hello_world():
with REQUEST_DURATION.time():
time.sleep(0.5) # 模拟耗时操作
return 'Hello, World!'
在这个示例中:
REQUEST_DURATION.time()
用于自动测量并记录处理 Flask 路由请求的时间。
在 Prometheus 中使用 Summary
的 observe(value)
方法通常用于手动记录一些特定的度量值,比如处理时间或者其他需要统计分析的数值。这里是一个使用 observe
方法记录请求处理时间的例子:
示例代码
假设你有一个 Flask 应用,并想记录每个请求的处理时间,可以通过以下方式使用 observe
方法:
from flask import Flask
from prometheus_client import Summary
import time
app = Flask(__name__)
REQUEST_DURATION = Summary('request_duration', 'Time spent processing request')
@app.route('/')
def hello_world():
start_time = time.time() # 获取开始时间
time.sleep(0.5) # 模拟耗时操作
duration = time.time() - start_time # 计算耗时
REQUEST_DURATION.observe(duration) # 记录耗时到 Summary
return 'Hello, World!'
操作解释
- 记录开始时间:在函数执行前获取当前时间。
- 执行操作:模拟一个耗时的操作,例如等待 0.5 秒。
- 计算持续时间:操作完成后,计算从开始到结束的时间差。
- 记录观测值:使用
observe
方法将计算出的持续时间记录到REQUEST_DURATION
这个Summary
中。
这个方法非常适合于记录不通过上下文管理器自动完成的度量,为你提供了更大的灵活性去手动记录任何需要的数值。
总结
Summary
的使用允许你自动收集关于事务处理时间的详细数据,并便于在 Prometheus 中计算和观察这些数据的统计百分位数。这些百分位数数据可以在 Prometheus 的查询语言(PromQL)中使用 histogram_quantile
函数来检索,帮助开发者和系统管理员了解系统的性能状况。