我已经在 AWS 上为我的 ELB 启用了访问日志,我们将它们发送到 logstash + elasticsearch + kibana 的设置。我正在使用logstash的grok过滤器将日志解析为单独的字段,我可以在kibana中查看和排序,并且在解析亚马逊在这些日志中给出的最后一个字段时遇到了困难,即“请求”字段。它实际上包含 3 个部分。HTTP 方法、URL 本身和 HTTP 版本。
我如何将这 3 个分成我可以使用的独立字段?
谢谢本雅明
我已经在 AWS 上为我的 ELB 启用了访问日志,我们将它们发送到 logstash + elasticsearch + kibana 的设置。我正在使用logstash的grok过滤器将日志解析为单独的字段,我可以在kibana中查看和排序,并且在解析亚马逊在这些日志中给出的最后一个字段时遇到了困难,即“请求”字段。它实际上包含 3 个部分。HTTP 方法、URL 本身和 HTTP 版本。
我如何将这 3 个分成我可以使用的独立字段?
谢谢本雅明
像这样的东西怎么样,替换你的 grok 过滤器的最后一个元素?
\"%{WORD:verb} %{NOTSPACE:request} HTTP/%{NUMBER:httpversion}\"
我以前从未真正管理过logstash,但我通过查看内置过滤器的源代码将其拼凑起来,其中一些显然是建立在其他内置过滤器之上的。
https://github.com/elasticsearch/logstash/blob/v1.4.1/patterns/grok-patterns
这种模式应该提取三个元素,“verb”将捕获“GET”,“httpversion”将捕获数字 HTTP 版本,“request”将捕获其余部分。
我承认我也在猜测反斜杠以转义消息中的双引号文字,但这似乎是包含文字引号以匹配 ELB 放入日志中的文字引号的合乎逻辑的方式。请注意,我显示的最后一个双引号不是过滤器字符串表达式的右引号。该引用将紧随上述内容之后,因为这与每行的最后一件事相匹配。