我想计算我的事件的平均持续时间。事件开始和结束后,它在线路协议语法中向我的线路协议语法发送一个请求。
mes1 id=1,event="start" 1655885442
mes1 id=1,event="end" 1655885519
mes1 id=2,event="start" 1655885643
mes1 id=2,event="end" 1655885914
mes1 id=3,event="start" 1655886288
mes1 id=3,event="end" 1655886372
mes1 id=4,event="start" 1655889323
mes1 id=4,event="end" 1655889490我可以这样查询结果:
from(bucket: "buck1")
|> range(start: -1w)
|> filter(fn: (r) => r["_measurement"] == "mes1")
|> filter(fn: (r) => r["_field"] == "event")
|> elapsed()结果:

正如您所看到的,我还得到了之间的持续时间----这些事件,而不仅仅是事件本身。
因此,当我添加mean()函数时,我得到了所有经过的秒的平均值:
from(bucket: "buck1")
|> range(start: -1w)
|> filter(fn: (r) => r["_measurement"] == "mes1")
|> filter(fn: (r) => r["_field"] == "event")
|> elapsed()
|> mean(column: "elapsed")结果:

我如何才能得到事件的平均值,而不是它们之间的时间?
这些活动的持续时间如下:
因此,预期的结果是599/4 = 149.75秒。
更新:
from(bucket: "buck1")
|> range(start: -1w)
|> filter(fn: (r) => r["_measurement"] == "mes1")
|> filter(fn: (r) => r["_field"] == "event" or r["_field"] == "id")
|> group(columns: ["id"])
|> elapsed()
|> group(columns: ["_measurement"])
|> mean(column: "elapsed")结果:
runtime error @6:8-6:17: elapsed: schema collision: cannot group string and float types together发布于 2022-06-24 15:23:58
您需要按id进行分组,然后通过_measurement取消分组。
|> group(columns: ["id"])
|> elapsed()
|> group(columns: ["_measurement"])
|> mean(column: "elapsed")更新我找到了另一个解决方案。需要使用difference而不是elapsed
|> filter(fn: (r) => r._field == "id")
|> group(columns: ["_value"])
|> difference(columns: ["_time"])
|> group()
|> mean(column: "_time")发布于 2022-06-28 10:27:01
在计算出经过的时间后,您是否尝试过过滤?
from(bucket: "buck1")
|> range(start: -1w)
|> filter(fn: (r) => r["_measurement"] == "mes1")
|> filter(fn: (r) => r["_field"] == "event")
|> elapsed()
|> filter(fn: (r) => r["_value"] == "end")
|> mean(column: "elapsed")这似乎是获得结果的最简单的方法。当然,这假设你总是有一系列的开始,结束,开始,.一旦不能保证这一点,使用id似乎是更稳定的方法。
https://stackoverflow.com/questions/72745478
复制相似问题