You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Grafana(Prometheus数据源)中动态筛选昨日日期标签数据

解决Grafana中Prometheus指标动态筛选昨日date标签的问题

你的核心问题是PromQL本身不支持直接在标签匹配中生成动态日期字符串,得结合Grafana的变量功能来实现,具体步骤如下:

方法一:使用Grafana动态变量(推荐)

  1. 创建日期变量

    • 进入Grafana仪表盘的「设置」→「变量」,点击「添加变量」
    • 变量类型选择「Date & time」,变量名设为yesterday_date
    • 「Time range」选择「Custom」,设置:
      • From: now-1d/d(自动对齐到昨日的起始时间)
      • To: now-1d/d
    • 「Format」选择「YYYY-MM-DD」,点击保存
  2. 在查询中使用变量
    直接在PromQL里用变量做精确匹配:

    metric_name{date="$yesterday_date"}
    

为什么你之前的尝试失败了

  • metric_name{date = today()}:PromQL没有today()函数,无法识别这种写法
  • metric_name{date=~"^(.*)-2d$"}:正则逻辑错误,你的date标签是YYYY-MM-DD格式,这个正则匹配的是结尾为-2d的字符串,和日期无关
  • metric_name{date=~"$(time()-2d:1d)"}:PromQL不支持这种语法插值,且time()返回的是Unix时间戳,不是YYYY-MM-DD格式的字符串,无法匹配date标签

方法二:纯PromQL实现(不推荐,性能较差)

如果不想依赖Grafana变量,可以通过标签转换和时间函数实现,但需要处理标签到时间格式的转换,示例如下:

metric_name
# 将date标签转换为无分隔符的日期字符串
|> label_replace(__name__, "date_str", "$1$2$3", "date", "(\\d{4})-(\\d{2})-(\\d{2})")
# 筛选昨日的日期字符串
|> where date_str == strftime("%Y%m%d", time() - 86400)

注:这种方法需要遍历所有指标标签做转换,数据量大时性能会受影响,优先推荐变量方案

内容的提问来源于stack exchange,提问作者Hili Pa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 05:52:48