每小时获取时间片,但按机器 ID 分组

Posted

技术标签:

【中文标题】每小时获取时间片,但按机器 ID 分组【英文标题】:Getting timeslice per hour but grouping by machine ID 【发布时间】:2021-12-07 21:22:10 【问题描述】:
_sourceCategory=myService
| json field=_raw "log.Log" as log_message
| json field=_raw "log.Barcode" as log_Barcode
| json field=_raw "log.MachineId" as machine_id
| where log_message contains "successfully sorted"
| count by machine_id

此查询将为我提供每个机器 ID 的成功计数。

我想要的是获取过去 24 小时内的所有消息并获取每小时的平均成功率。

所以而不是拥有

Machine ID Success Rate Count TIME
123445 2400 24H

我得到了类似的东西

Machine ID Success Rate Count per Hour TIME
123445 100 24H

【问题讨论】:

【参考方案1】:

在使用if 语句应用时间片之前,您必须标记成功与失败。然后在字段上应用时间片和聚合并计算比率。比如:

_sourceCategory=myService
| json field=_raw "log.Log" as log_message
| json field=_raw "log.Barcode" as log_Barcode
| json field=_raw "log.MachineId" as machine_id
| if (log_message matches "*successfully sorted*", 1, 0) as success
| timeslice 1h
| count as total_records, sum(success) as successes by _timeslice
| successes / total_records * 100 as success_rate_pct

【讨论】:

此查询将为我提供每条总消息的成功率百分比。我需要的是每小时平均成功率。因此,如果您在 8 小时内成功 80 次,则每小时的成功率为 10

以上是关于每小时获取时间片,但按机器 ID 分组的主要内容,如果未能解决你的问题,请参考以下文章

如何按 2 列分组,但按 count() 降序排列

如何获取 SQL 中具有 MAX 和 MIN 值的行的 ID

访问报告:如何按一个字段分组,但按另一个字段排序?

oracle中怎么按每小时分组。数据如下:

Mongodb,按日期差异分组并获取小时

MongoDB 时间序列聚合