我是LogStash的新手.我在Log4J中有一些从Java应用程序编写的日志.我正在尝试将这些日志放入ElasticSearch.对于我的生活,我似乎无法让它始终如一地运作.目前,我正在使用以下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
带有["ApplicationName"]的那个有我的自定义字段timestamp
和level
.但是,带有["_grokparsefailure"]的条目没有我的自定义字段.奇怪的是,日志几乎相同,如上面的消息栏中所示.这真让我感到困惑,但是,我不知道如何弄清楚问题是什么或如何超越它.有谁知道我如何使用导入log4j日志到logstash并一致地获取以下字段:
日志级别
时间戳
记录消息
机器名称
线
感谢您提供任何帮助.即使我可以只记录日志级别,时间戳和日志消息,这将是一个巨大的帮助.我真诚地感激它!
我建议使用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