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

Convert string to number in AWS log insight

提问人:raah 提问时间:10/12/2023 最后编辑:raah 更新时间:10/12/2023 访问量:75

问:

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

“[统计] |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 列是空的,我希望看到从 pub2 中减去 pub1 的结果。因此,如果我们使用我上面提供的示例消息,我希望看到 1697041097406589000 - 1697041097288531000 的结果作为其中一行的 elaspedTime 值。

enter image description here

如果我将 pub1 和 pub2 字段换成硬编码的数字,它会起作用,但当然我正在尝试使用字符串值并将它们转换为日志消息中的数字。

网络服务 云观察 亚马逊 CloudWatch日志 AWS-CloudWatch-日志

评论

0赞 Quassnoi 10/12/2023
“没有运气”——这到底是什么意思?它会抛出错误吗?给出错误的结果?请发布您得到的结果和您想要得到的结果。谢谢!
0赞 raah 10/12/2023
根据要求在工单中添加了更多细节,希望这更清楚一些
0赞 Quassnoi 10/12/2023
这里的目的是什么? 假定存在某种聚合。如果您将其替换为并丢失 ,它将起作用。statsstatsfieldsby timestamp

答:

1赞 Quassnoi 10/12/2023 #1

stats接受常量值、分组值或聚合函数作为其参数。

当您将字段替换为硬编码数字时,它们将成为常量值。但是你既没有按分组,也没有聚合它们,因此无法在上下文中进行评估。此时,大多数数据库引擎都会引发错误,但 Log Insights 只会吞下它并返回一个空值。pub1pub2abs(pub2) - abs(pub1)stats

看起来你真的不需要这里。将查询替换为:stats

fields @timestamp, @message
| filter @message like /[Statistics]/
| parse MessageTemplate "*|*|*|*" as header, pub1, pub2, pub3
| fields abs(pub2) - abs(pub1) as elapsedTime
| limit 20

评论

0赞 raah 10/12/2023
字符串值似乎被错误地转换为数字。例如,对于包含以下 pub1 pub2 字符串值的消息:“.....1697098568608803000 |1697098568144016000...“数字被错误地转换为1697098568608802820和1697098568144015870。最后 4 位数字似乎总是错的。
0赞 Quassnoi 10/12/2023
@raah:它看起来像一个舍入错误。你真的需要这么高的时间戳精度吗?
0赞 raah 10/12/2023
不,我会从纳米级提高到毫秒级。