Grafana中Prometheus数据源下currentDate/currentHour变量配置求助
Grafana + Prometheus 动态日期/小时变量配置方案
问题原因
Grafana的Query类型变量对Prometheus函数的返回格式有硬性要求——必须是标签值列表,但hour()这类函数返回的是带时间戳的瞬时向量,不符合变量的预期格式,所以会报错;而Prometheus控制台本身支持直接输出这类向量,因此能正常显示结果。
替代实现方案
不需要依赖Prometheus的hour()/日期函数,直接用Grafana内置变量或适配格式的PromQL来定义变量:
1. 今日日期变量(格式:YYYY-MM-DD)
方案一:Text类型变量(推荐)
变量类型选「Text」,在「Default value」中填入Grafana内置时间模板:${__date:YYYY-MM-DD}若不需要手动修改日期,可在「Hide」选项中选择「Variable」,让变量自动动态获取当前日期。
方案二:Query类型变量
用PromQL生成格式化日期字符串,变量查询语句填:vector(strftime("%Y-%m-%d", time()))然后在「Regex」字段填入
(.*),提取出日期字符串作为变量值。
2. 当前小时变量(格式:24小时制,如14)
方案一:Text类型变量(推荐)
变量类型选「Text」,「Default value」填入:${__date:HH}同样可选择隐藏变量,自动获取当前24小时制小时数。
方案二:Query类型变量
变量查询语句填:vector(strftime("%H", time()))「Regex」字段填入
(.*),提取小时数值。
额外技巧:直接在PromQL中使用当前时间筛选
如果不需要单独定义变量,可直接在指标查询中嵌入时间判断,比如筛选今日数据:
your_metric{job="your_job"} and on() (day_of_month(time()) == day_of_month(vector(time())))
筛选当前小时的数据:
your_metric{job="your_job"} and on() (hour(time()) == hour(vector(time())))
内容的提问来源于stack exchange,提问作者hakash
相关产品推荐
相关产品推荐

