从包含纯文本的@message 字段解析值:AWS Cloudwatch Logs

Posted

技术标签:

【中文标题】从包含纯文本的@message 字段解析值:AWS Cloudwatch Logs【英文标题】:parse values from @message field which contains plain text : 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,我已经更新了所有附加细节的帖子。请您仔细阅读并提供您的意见。 【参考方案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).+(?="))/

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

【讨论】:

以上是关于从包含纯文本的@message 字段解析值:AWS Cloudwatch Logs的主要内容,如果未能解决你的问题,请参考以下文章

解析纯文本并在android中生成csv

字符串 CSV解析 表格 逗号分隔值

从message.getFrom()解析域名,电子邮件和名称

将 <br> 解析为纯文本新段落

从服务器向AWS JS SDK发送签名,而不是使用纯文本密钥

如何使用 PHP 在 MySQL 数据库中将纯文本 CSV 字段保存为 HTML?