首页 文章

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

提问于
浏览
0

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

在本地,我想基于文件名app.log,app.log.1等创建一个文件 . 如何实现这一目标?

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

示例日志事件:

{“message”:[“2014年9月11日16:29:04,934 INFO日志消息详情在这里”],“@ version”:“1”,“@ timestamp”:“2014-09-15T05:44:43.472Z”, “文件”:[ “/ Tomcat的/日志/ app.log.1”], “宿主”: “AUS-002157”, “偏移量”: “3116”, “类型”: “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"
    }
}

2 回答

  • 2

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

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

    filter {
       grok {
           match => [ "file", "your pattern" ]
       }
    }
    
  • 3

    找出模式如下:

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

    谢谢您的帮助!

相关问题