我正在尝试获取从如下所示的日志消息中减去两个数字的值。
“[统计] | 1697041097288531000 | 1697041097406589000 | 1697041097458528733”
我尝试通过 aws log Insights 进行以下查询,但没有成功。是否可以在 aws log Insights 中执行此操作?
fields @timestamp, @message
| filter @message like /[Statistics]/
| parse MessageTemplate "*|*|*|*" as header, pub1, pub2, pub3
| stats abs(pub2) - abs(pub1) as elaspedTime by @timestamp
| limit 20
请注意,我的日志是 JSON 日志,其中包含一个名为 MessageTemplate 的字段。
我得到的结果如下,你可以看到elaspedTime列是空的我希望看到从pub1减去pub2的结果。因此,如果我们使用上面提供的示例消息,我希望看到 1697041097406589000 - 1697041097288531000 的结果作为其中一行的 elaspedTime 值。
如果我将 pub1 和 pub2 字段替换为硬编码数字,它就可以工作,但当然我正在尝试使用字符串值并将它们转换为日志消息中的数字。
stats
接受常量值、分组值或聚合函数作为其参数。
当您用硬编码数字替换字段时,它们将变成常量值。但您既不按
pub1
和 pub2
进行分组,也不聚合它们,因此无法在 abs(pub2) - abs(pub1)
上下文中评估 stats
。大多数数据库引擎都会在此时抛出错误,但 Log Insights 只是吞下它并返回一个空值。
看起来你真的不需要
stats
。将您的查询替换为:
fields @timestamp, @message
| filter @message like /[Statistics]/
| parse MessageTemplate "*|*|*|*" as header, pub1, pub2, pub3
| fields abs(pub2) - abs(pub1) as elapsedTime
| limit 20