【问题标题】:Parsing Custom Logs Format Using Grok使用 Grok 解析自定义日志格式
【发布时间】:2021-10-17 08:49:03
【问题描述】:

我有一些我想解析的 costum 日志文件,以便我可以在 logstash 中提供它们。我构建了一个 grok 模式来解析它们,但我承认我对 grock 和正则表达式不是很精通,我想问一下我所做的是否可以以某种方式简化/优化。

日志示例:

  system_info : Calculator[1]_Global@HKGL1V5KY33 (23572.0000000007A668B0) : [2020/10/14-15:43:17.975] : GridTaskProcessor::mainThreadRun() : Routing criteria : GridServiceName = SophisMonteCarlo
  system_warning : Calculator[1]_Global@HKGL1V5KY33 (23572.0000000007A668B0) : [2020/10/14-15:43:07.840] :vDBFees::loadFeesDetailsMapping() : Broker detail fees mapping begin
  system_info : NamingServer[standard]@BMALAN (10276.000000001C8DA890) : [2020/08/05-15:04:13.426] : GenericServiceLoader::InitGenericServices() : Initializing generic service 'MonitoringHubConnector'...
  system_info : ServerAdminConsole[standard]@BMALAN (8880.000000001B7A75D0) : [2019/05/31-15:04:23.240] : ServerAdminConsole::backgroundWorker_DoWork() : Initializing Entries from naming service....

Grok 模式:

\s*(?<verbosity>(.*?)(?=\ :))\s*:\s*(?<servicename>(.*?)(?=\@))@(?<servername>(.*?)(?=\ ))\s*\((?<threadid>(.*?)(?=\)))\)\s*:\s*\[(?<date>(.*?)(?=\-))\-(?<time>(.*?)(?=\]))\]\s*:\s*(?<class>(.*?)(?=\())\(\)\s*:\s*%{GREEDYDATA:message}

Grok Parsing Explained

【问题讨论】:

  • 我的回答对你有帮助吗?

标签: elasticsearch logging logstash grok


【解决方案1】:

一般来说,您不一定需要对日志消息 (=line) 的每个部分都进行所有前瞻。积极的前瞻会导致更多的处理时间。这并不意味着前瞻不好,但您应该问问自己是否真的需要它们。

在我看来,如果您不确定日志行的部分/字符是否出现,则积极的前瞻很有用。

许多日志遵循已定义的模式,该模式记录在某处(例如 Apache 访问日志)。

日志行中不总是出现的部分可以使用 ?-quantifier like 设置为可选

.*(%{DATA:some_field})?.*

此外,与 grok 模式不匹配的事件会获得标签 _grokparsefailure(默认)。您可以在 Kibana 中搜索带有此标签的事件,分析它们不匹配的原因,然后调整您的模式。

总结一下:

问问自己是否可以依赖基本模式并忽略前瞻。

希望能帮到你。

【讨论】:

  • 非常感谢或您的反馈。我将使用它并优化我的解析。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多