2014-04-04 27 views
23

我是LogStash的新手。我有一些从Log4J中的Java应用程序写入的日志。我正在尝试将这些日志存入ElasticSearch。对于我的生活,我似乎无法让它始终如一地工作。目前,我正在使用以下logstash配置:使用Log4J和LogStash

input { 
    file { 
    type => "log4j" 
    path => "/home/ubuntu/logs/application.log" 
    } 
} 
filter { 
    grok { 
    type => "log4j" 
    add_tag => [ "ApplicationName" ] 
    match => [ "message", "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level}" ] 
    } 
} 
output { 
    elasticsearch { 
    protocol => "http" 
    codec => "plain" 
    host => "[myIpAddress]" 
    port => "[myPort]" 
    } 
} 

此配置似乎被击中或未命中。我不知道为什么。例如,我有两条消息。一个工作,另一个抛出解析失败。然而,我不知道为什么。以下是消息及其各自的结果:

Tags     Message 
------     ------- 
["_grokparsefailure"] 2014-04-04 20:14:11,613 TRACE c.g.w.MyJavaClass [pool-2- 
         thread-6] message was null from https://domain.com/id-1/env- 
         MethodName 

["ApplicationName"] 2014-04-04 20:14:11,960 TRACE c.g.w.MyJavaClass [pool-2- 
         thread-4] message was null from https://domain.com/id-1/stable- 
         MethodName 

的一个与[“应用程序名称”]有timestamplevel我的自定义字段。但是,使用[“_grokparsefailure”]的条目没有我的自定义字段。奇怪的是,日志几乎与上面的消息栏中显示的相同。这真令我困惑,但我不知道如何弄清楚问题是什么或如何超越它。有谁知道我怎么可以用进口的log4j登录到logstash并获得以下字段一致:

  • 日志级别
  • 时间戳
  • 日志消息
  • 机名称
  • 螺纹

感谢您提供任何帮助。即使我只能记录日志级别,时间戳和日志消息,这也是一个巨大的帮助。我衷心感谢!

+3

我看不出你神交模式永远匹配。你在%{LOGLEVEL:level}之前有两个空格“如果你必须处理可变数目的空格,用\ s +而不是空格来匹配一个或多个空格,并且在grok调试器上使用+1回答 – Alcanzar

回答

22

我建议使用log4j套接字侦听器logstash和log4j套接字appender。

Logstash的conf:

input { 
    log4j { 
    mode => server 
    host => "0.0.0.0" 
    port => [logstash_port] 
    type => "log4j" 
    } 
} 
output { 
    elasticsearch { 
    protocol => "http" 
    host => "[myIpAddress]" 
    port => "[myPort]" 
    } 
} 

log4j.properties:

log4j.rootLogger=[myAppender] 
log4j.appender.[myAppender]=org.apache.log4j.net.SocketAppender 
log4j.appender.[myAppender].port=[log4j_port] 
log4j.appender.[myAppender].remoteHost=[logstash_host] 

有更多信息的logstash文档为自己的log4j输入:http://logstash.net/docs/1.4.2/inputs/log4j

+0

我会推荐与你一样,但现在,当发送的消息数量非常大时,我开始有问题了。请记住,log4j从TCP连接读取事件。 – alicia

+0

我认为log4j_port在log4j.properties文件中应该是logstash_port。 – imesh

+0

''[logstash_host]'必须是本地主机吗?我们必须指定ip还是主机名可以? – AbtPst