首页 > 解决方案 > 如何使用 grok 捕获日志中的所有消息

问题描述

我正在尝试捕获日志中的所有消息。

例如,我们得到这个包含 6 条消息的日志。

"消息":["18.59.43 STC47873 +LRGPSEVRI\u000007/29/20 18:59:43 我西登录到 Tandem/Base24。","18.59.43 STC47873 +LRGPSEVRI\u000007/29/20 18:59 :43 I West 从 Tandem/Base24 注销。","18.59.43 STC47873 +LRGPSEVRI\u000007/29/20 18:59:43 I West Environment reset ok","18.59.43 STC47873 +LRGPSEVRE\u000007/29/ 20 18:59:43 E West 任务发生最大重置","18.59.43 STC47873 +LRGPSEVRE\u000007/29/20 18:59:43 E West Base24/Tandem 通信错误。解决后运行作业 PRGSWSVR。"," 18.59.43 STC47873 +LRGPSEVRI\u000007/29/20 18:59:43 I West Server is ending","\u0000 "],"seq":{"w":"3","c":"32347" }}

我注意到,一旦我的 grok 在其中一条消息中找到匹配项,它只会显示该消息,在这种情况下是第一个消息。是否可以捕获所有 6 个并将其发送到 Kibana?

我将不胜感激任何建议。我是 grok 的新手,我尝试了我在 google 中找到的所有东西,但似乎对这种特殊情况没有任何作用。

谢谢你。

标签: logginggrok

解决方案


如果你知道总是会有 6 条消息,你可以使用这样的东西:

"message":(\[%{QS:message_1},%{QS:message_2},%{QS:message_3},%{QS:message_4},%{QS:message_5},%{QS:message_6},%{QS:a_string}\]),"seq":{"w":"3","c":"32347"}}

如果你想进一步分开它们,你可以这样做:

"message":(\[%{DATA:time} %{DATA:string_1} %{DATA:string_2} %{DATA:time} %{DATA:text_1},%{DATA:time} %{DATA:string_1} %{DATA:string_2} %{DATA:time} %{DATA:text_2},%{DATA:time} %{DATA:string_1} %{DATA:string_2} %{DATA:time} %{DATA:text_3},%{DATA:time} %{DATA:string_1} %{DATA:string_2} %{DATA:time} %{DATA:text_4},%{DATA:time} %{DATA:string_1} %{DATA:string_2} %{DATA:time} %{DATA:text_5},%{DATA:time} %{DATA:string_1} %{DATA:string_2} %{DATA:time} %{DATA:text_6},%{QS:a_string}\]),"seq":{"w":"3","c":"32347"}}

您可以在http://grokdebug.herokuapp.com/中对其进行测试


推荐阅读