在 AWS Log Insight 中将字符串转换为数字

问题描述 投票:0回答:1

我正在尝试获取从如下所示的日志消息中减去两个数字的值。

“[统计] | 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 字段替换为硬编码数字,它就可以工作,但当然我正在尝试使用字符串值并将它们转换为日志消息中的数字。

amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs aws-cloudwatch-log-insights
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.