Grok 用于日志文件 Logstash

Posted

技术标签:

【中文标题】Grok 用于日志文件 Logstash【英文标题】:Grok for log files Logstash 【发布时间】:2020-04-22 12:03:00 【问题描述】:

我需要编写一个 grok 模式来检索“** **”中的内容

-----Start of script for server sitboap1 at **Fri Apr 17 14:24:19** HKT 2020---------
**user11**   87751      1   0 Apr16 ?        00:00:00 sh **job1.sh**
**user11**   877452  89451  0 Apr16 ?        00:00:00 sh **job2.sh** --server-config= full.xml
**user11**   89772   89452  3 Apr16 ?        00:02:35 **/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/bin/java** -D[stdd] -server -verbose:gc

日志应该从顶部获取日期,从列表中获取用户名和作业名。 每个日期下的行数可能会有所不同。

我无法完全找出完全符合我要求的 grok。

它可以是 Grok 和 Logstash 中的过滤器的组合,但我的最终期望是拥有这些列。

【问题讨论】:

【参考方案1】:

您可以尝试以下 grok 过滤器。有 2 个过滤器。

获取标题中的日期和时间。

-----Start of script for server (.*[a-z|A-Z|0-9]) at %GREEDYDATA:UserDateTime (.*[a-z|A-Z])

获取内容。

%GREEDYDATA:User ([1-9][0-9]1,10) (.*) %GREEDYDATA:execFile

最后你可以使用这个website 来创建 grok 过滤器。

【讨论】:

谢谢,但如果我的日志一直以相同的模式附加,我可以使用 2 个过滤器吗?我将如何匹配我的日期和值? 我假设你需要逐行解析它;由于日期并不存在于每一行中,因此您可以通过多个匹配来获得它。 grok match => "date" => PATTERN, match => "values" => PATTERN

以上是关于Grok 用于日志文件 Logstash的主要内容,如果未能解决你的问题,请参考以下文章

使用Logstash filter grok过滤日志文件

Logstash,grok 过滤器不适用于固定长度字段

Logstash Grok过滤器Apache访问日志

Logstash使用grok解析IIS日志

Logstash使用grok解析IIS日志

Logstash grok 模式过滤自定义日志消息