如何为log4j消息配置logstash过滤器?

时间:2016-07-01 13:42:25

标签: elasticsearch log4j logstash

我有一个文件mylog.log,其中包含以下内容。

2014-07-02 20:52:39 DEBUG HelloExample:19 - This is debug : ishan
2014-07-02 20:52:39 INFO  HelloExample:23 - This is info : ishan
2014-07-02 20:52:39 WARN  HelloExample:26 - This is warn : ishan
2014-07-02 20:52:39 ERROR HelloExample:27 - This is error : ishan
2014-07-02 20:52:39 FATAL HelloExample:28 - This is fatal : ishan

我有以下用于logstash的配置文件

input {
  file {
    path => "/home/ishan/sf_shared/log4jlogs/1-7-2016.txt"
    start_position => "beginning"
    codec => multiline {
      pattern => "(^d+serror)|(^.+Exception: .+)|(^s+at .+)|(^s+... d+ more)|(^s*Caused by:.+)"
      what => "previous"
    }
  }
}
output {
  elasticsearch => ["127.0.0.1:9200"]
  stdout { codec => rubydebug }
}

因此,当我使用以下命令运行logstash时 / opt / logstash / bin / logstash -f log4j.conf

但它在控制台上没有显示任何内容。 那么,如何在控制台上显示它?在添加之后如何检查ES?使用以下json格式解析信息需要什么样的过滤器?

{
  "severity": DEBUG
  "class": HelloExample
  "message":This is debug : ishan
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

你需要研究grok模式。检查此link。 这应该适合你:

input {
  file {
    path => "/home/ishan/sf_shared/log4jlogs/1-7-2016.txt"
    start_position => "beginning"
  }
}
filter {
    grok {
        match => {
            "message" => '%{YEAR}[-]%{MONTHNUM}[-]%{MONTHDAY} %{TIME} %{LOGLEVEL:severity} %{GREEDYDATA:class}%{INT} - %{GREEDYDATA:mess}'
        }   
    }
}
output {
  elasticsearch => ["127.0.0.1:9200"]
  stdout { codec => rubydebug }
}