tni*_*ssi 11 regex amazon-cloudwatch amazon-cloudwatchlogs
我正在尝试使用parse命令提取一个临时字段。不幸的是,日志格式无法满足要求,因此我需要使用正则表达式。正则表达式本身很好,但我只是无法发出提取任何内容的命令。
我正在尝试:
parse @endpoint /^([a-zA-Z_]+)[\/|?]*.*/ as @clean_endpoint
Run Code Online (Sandbox Code Playgroud)
第一组是我想要的,我曾尝试使用不同类型的引号等。这可能只是一个愚蠢的格式错误,但我找不到它。
几乎唯一提及该parse命令的文档都在这里,其中的示例就是使用glob表达式的。都无法通过谷歌搜索找到任何示例。
所以有人碰到这个问题并解决了吗?
尝试另一种方法,例如
parse @message /(?<@endpt>(\/[a-zA-Z0-9_]+){1,})/
| stats count_distinct(@endpt) by @endpt
Run Code Online (Sandbox Code Playgroud)
或者,考虑解决方案
fields @timestamp
| parse @message /(?<@endpt_post>POST (\/[a-zA-Z0-9_]+){1,})/
| parse @message /(?<@endpt_get>GET (\/[a-zA-Z0-9_]+){1,})/
| stats count() by @endpt_post, @endpt_get
Run Code Online (Sandbox Code Playgroud)
祝你好运!
小智 7
不确定您是否找到了答案,但是在使用正则表达式和 parse 时,您不能像使用 glob 那样命名临时字段。
使用 glob 表达式时,请在语句末尾使用“as ___”命名新字段。使用正则表达式尝试此操作时,它不起作用。
parse @message ((glob expression here)) as ephem_field
Run Code Online (Sandbox Code Playgroud)
使用正则表达式时,新字段应在表达式本身内命名为命名组。
parse @message /(?<clean_endpoint>^([a-zA-Z_]+)[\/|?]*.*)/
Run Code Online (Sandbox Code Playgroud)
尽管正则表达式允许您使用单引号'name'或尖<name>括号命名组,但我注意到 AWS CloudWatch Insights 在命名组时仅接受尖括号。尝试使用单引号时,我收到错误消息,说它无法理解查询。
我不确定 AWS 使用的是什么正则表达式类型,但我确实发现我必须转义其他工具中允许的一些字符。