Logstash - grok 使用消息以外的字段

Posted

技术标签:

【中文标题】Logstash - grok 使用消息以外的字段【英文标题】:Logstash - grok use a field other than message 【发布时间】:2014-09-15 05:55:01 【问题描述】:

我正在使用 Logstash 转发器从远程服务器接收 Log4j 生成的日志文件。日志事件的字段包括一个名为“文件”的字段,格式为 /tomcat/logs/app.log、/tomcat/logs/app.log.1 等。当然文件路径 /tomcat/logs 在远程机器上我希望 Logstash 仅使用文件名而不使用远程文件路径在本地文件系统上创建文件。

在本地,我想根据文件名 app.log、app.log.1 等创建一个文件。如何才能做到这一点?

我无法使用 grok,因为它似乎只适用于“消息”字段而不适用于其他字段。

示例日志事件:

"message":["11 Sep 2014 16:29:04,934 INFO LOG MESSAGE DETAILS HERE"],"@version":"1","@timestamp":"2014-09-15T05:44:43.472 Z","file":["/tomcat/logs/app.log.1"],"host":"aus-002157","offset":"3116","type":"app.log"

Logstash 配置 - 我用什么来编写过滤器部分?

input 
    lumberjack 
      port => 48080
      ssl_certificate => "/tools/LogStash/logstash-1.4.2/ssl/logstash.crt"
      ssl_key => "/tools/LogStash/logstash-1.4.2/ssl/logstash.key"
    


filter



output 

    file
        #message_format => "%message"
        flush_interval => 0
        path => "/tmp/%host.%type.%filename"
        max_size => "4M"
    

【问题讨论】:

【参考方案1】:

计算出的模式如下:

grok
    match => [ "file",  "^(/.*/)(?<filename>(.*))$" ]

感谢您的帮助!

【讨论】:

【参考方案2】:

Logstash Grok 可以解析日志事件中的所有字段,而不仅仅是message 字段。

例如,您要提取file 字段, 你可以这样做

filter 
   grok 
       match => [ "file", "your pattern" ]
   

【讨论】:

感谢您的回复。提取文件名 app.log.1 的模式是什么? 如何访问文件中的孩子?例如。 "file": "name": "foobar.log"

以上是关于Logstash - grok 使用消息以外的字段的主要内容,如果未能解决你的问题,请参考以下文章

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

Logstash 应该只记录 grok 解析的消息

logstash / grok 自定义字段

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

使用Logstash filter grok过滤日志文件

logstash的grok提取中括号关键词后面的数据到指定字段