logging - 如何使用 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 中找到的所有东西,但似乎对这种特殊情况没有任何作用。
谢谢你。
解决方案
如果你知道总是会有 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"}}
推荐阅读
- sql - 使用与 exec 连接
- reactjs - React 2020 中的 document.getElementById() 等效项
- postgresql - Liquibase 社区上的 PostgreSQL 存储过程
- node.js - 如何限制/速率限制请求以防止 Axios 出现 429 错误
- git - Github 功能分支自动生成分支并再次合并
- javascript - 使用嵌套地图生成组件
- python - Python Kivy 不会使用 SDL2,坚持使用 pygame
- vue.js - 在 Vuetify 滑块中将文本与不同方向对齐
- python - TypeError:“NoneType”对象不可迭代
- java - Kotlin方式接口中的Java变量