想在 Grafana 里做一个柱状图,展示当前值与七天前同一指标的差值。用 Elasticsearch 数据源,两条查询分别取当前区间和上周区间,再做差值。
问题现象
第一个思路是用 Lucene 查询把时间范围整体往前挪 7 天:
_index:myindex AND metric_name: XXX AND @timestamp:[${__from}-7d TO ${__to}-7d]
这条查询一条数据都查不出来,而 @timestamp:[now-1d TO now] 这种写法却是正常的。
第二个问题出在转换:两条查询配好之后用 Add field from calculation 做差值,结果也是空的。用 @timestamp:[now-1h TO now] 与 @timestamp:[now-2h TO now-1h] 做测试同样不行——两个时间窗口完全不重叠,转换没有可对齐的行。
原因分析
Grafana 的 ${__from} 与 ${__to} 在 Lucene 查询字符串里会被替换成时间字面量,替换之后 Elasticsearch 的 range 语法解析到的是 [<from>-7d TO <to>-7d]。这种\”字面量再减偏移\”的写法并不是合法的时间数学表达式:Elasticsearch 只在 now




