如何在Prometheus中查询带指定标签值的时间序列并设置采样步长
Prometheus指定event_id按固定步长查询指标的PromQL方案
前置要求
Prometheus版本≥2.25,支持min_time()、max_time()时间函数及范围子查询语法。
单指标查询示例
以查询event_id="event_123"的metric1、10秒采样步长为例,语句如下:
metric1{event_id="event_123"}[max_time(metric1{event_id="event_123"}) - min_time(metric1{event_id="event_123"}):10s]
逻辑说明:
内层先通过min_time、max_time自动计算该event_id对应指标的总存在时间跨度,外层范围查询指定采样步长为10秒,自动覆盖整个事件的完整生命周期,无需提前手动输入事件的起止时间。
多指标同时查询示例
如果需要同时返回metric1和metric2的采样结果,通过指标名正则匹配即可:
{__name__=~"metric1|metric2", event_id="event_123"}[max_time({__name__=~"metric1|metric2", event_id="event_123"}) - min_time({__name__=~"metric1|metric2", event_id="event_123"}):10s]
更高性能的API调用方案
如果是通过Prometheus HTTP API查询,推荐分两步操作降低查询性能损耗:
- 第一步调用
query接口,获取该事件对应指标的时间范围:
执行语句min_time(metric1{event_id="event_123"})得到事件开始时间戳,执行max_time(metric1{event_id="event_123"})得到事件结束时间戳 - 第二步调用
query_range接口,start、end参数传入上一步获取的时间戳,step参数设为10s,查询语句直接写{__name__=~"metric1|metric2", event_id="event_123"}即可,返回结果就是按10秒间隔采样的指标值。
注意事项
- 若事件持续时长极长,采样点数量超过Prometheus默认查询样本量限制,可适当调大步长,或者修改Prometheus启动参数
--query.max-samples放宽限制。 - 若使用的Prometheus版本低于2.25,无
min_time、max_time函数,可直接在query_range接口传入足够大的时间范围(如过去7天),Prometheus会自动过滤无数据的时间段,仅返回该event_id存在时间段内的采样结果。
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

