如何在Prometheus查询中自定义返回样本的采样频率
PromQL调整返回样本采样频率的实现方法
你可以通过子查询+时间聚合函数的方式在不修改scrape_interval配置的前提下,自定义查询返回的采样间隔,具体实现如下:
核心原理
xxx_over_time类聚合函数可以对指定时间窗口内的原始样本做计算,配合PromQL子查询的[时间范围:步长]语法,即可将步长设为你需要的采样间隔,输出对应频率的样本点。
常用示例
以下均以查询1周范围数据为例,根据你需要的采样间隔调整参数即可:
- 每10秒返回1个采样点(取每个10秒窗口内的最新样本值):
last_over_time(metric_name[10s])[1w:10s] - 每30秒返回1个采样点(取每个30秒窗口内的样本平均值):
avg_over_time(metric_name[30s])[1w:30s] - 每5分钟返回1个采样点(取每个5分钟窗口内的样本最大值):
max_over_time(metric_name[5m])[1w:5m]
注意事项
- 聚合窗口长度(
xxx_over_time后面的时间参数)建议和子查询步长保持一致,避免出现数据重叠或遗漏的情况 - 自定义采样间隔建议大于等于Prometheus配置的
scrape_interval,如果采样间隔小于原始抓取间隔,多个连续窗口会拿到同一个原始样本值,出现大量重复输出 - 如果你是通过Prometheus HTTP API发起查询,也可以直接在请求参数中指定
step参数为目标采样间隔,无需修改PromQL语句,API会自动按指定步长返回采样结果,适合不需要自定义聚合逻辑的通用场景。
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

