from(bucket: "metrics")
|> range(start: -5m)
|> filter(fn: (r) => r["_measurement"] == "cpu")
|> filter(fn: (r) => r["_field"] == "usage")
|> last()
运行此查询只会返回最近 5 分钟内保存的数据。
我要寻找的是,如果没有提供的时间范围内的数据,则获取最新数据(可能是 10m 前或 5d 前)。我知道 prometheus 确实返回了最后的数据,我们正在尝试从 prometheus 迁移到 influxDB,但遇到了这个问题。
此外,仅将范围增加到 -10d 是行不通的,因为数据量非常大(每秒写入数百条记录)。
我们也在尝试下采样,看看这是否对我们有用,但想知道是否有办法从源存储桶本身获取它。
最佳答案
我也遇到了同样的问题,并找到了可能有帮助的解决方案。
首先使用从 0 到 now() 的所有时间范围 ( influxdb-client-python #172 )
如果日期很大,则需要很长时间。
所以对其添加限制,使用tail()指定n条记录按时间降序查询数据。
这是我的代码:
from(bucket: "future_ticks")
|> range(start: 0, stop: now())
|> filter(fn: (r) => r["_measurement"] == "TXFR1")
|> filter(fn: (r) => r._field == "close")
|> aggregateWindow(every: 1m, fn: last, createEmpty: false, timeSrc: "_start")
|> tail(n: 77)
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
这样我就可以在77分钟内获得所需的数据,而无需指定时间范围。
关于InfluxDB - 获取最新数据,即使不在提供的时间范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72279580/