【问题标题】:parse values from @message field which contains plain text : AWS Cloudwatch Logs从包含纯文本的@message 字段解析值:AWS Cloudwatch Logs
【发布时间】:2022-01-20 13:33:45
【问题描述】:
**@message  
{ "level": "INFO", "message": "User 2c5e2225-0037-4a0f-b87a-405d8b4f8fe8 has successfully downloaded the file IT_1994_December_ConditionSets_CardioSets,release 1994_December and file type .xlsx" }**

我想从上面的日志中提取用户的值:2c5e2225-0037-4a0f-b87a-405d8b4f8fe8,文件名:IT_1994_December_ConditionSets_CardioSets,文件类型:.xlsx。

这里的复杂性是消息字段没有 key: value 格式数据,而是有纯文本。

有人可以帮助我形成查询以从消息中提取数据并在 cloudwatch 搜索结果中显示为别名。

我创建了正则表达式来提取这些值并在线测试。正则表达式:

To extract User : /(?<=User\s).*(?=\shas)/ 
To extract filename : /(?<=file\s).+(?=,)/ 
To extract file type : /(?<=type\s).+(?=")/

我创建了下面的查询来解析和返回数据:

 fields user, fileName, fileType
  | filter @message like /downloaded/
  | parse @message /(?<user>^(?<=User\s).*(?=\shas))/
  | parse @message /(?<fileName>^(?<=file\s).+(?=,))/
  | parse @message /(?<fileType>^(?<=type\s).+(?="))/

它没有按预期返回结果。如果需要任何改进,任何人都可以查看此查询吗??

感谢您对此的任何帮助。

【问题讨论】:

  • 你能澄清一下你想要的预期结果是什么吗?
  • 嗨@Omar,我已经更新了所有附加细节的帖子。请您仔细阅读并提供您的意见。

标签: amazon-web-services aws-lambda amazon-cloudwatch aws-cloudwatch-log-insights


【解决方案1】:

我已经设法通过使用正则表达式解析消息来形成正确的查询以从纯文本中提取值。

最终的工作查询是:

fields @user, @fileName, @fileType
| filter @message like /downloaded/
| parse @message /(?<@user>(?<=User\s).*(?=\shas))/
| parse @message /(?<@fileName>(?<=file\s).+(?=,))/
| parse @message /(?<@fileType>(?<=type\s).+(?="))/

我做了一些语法更正,它开始返回预期的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-09
    • 2022-11-03
    • 1970-01-01
    • 2020-11-10
    • 2023-04-05
    • 1970-01-01
    • 2021-12-01
    • 2021-07-04
    相关资源
    最近更新 更多