将Log4J与LogStash一起使用

时间:2014-04-04 20:35:05

标签: log4j logstash

我是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”]的人的自定义字段为timestamplevel。但是,带有[“_grokparsefailure”]的条目没有我的自定义字段。奇怪的是,日志几乎相同,如上面的消息栏中所示。这真让我感到困惑,但是,我不知道如何弄清楚问题是什么或如何超越它。有谁知道如何将log4j日志导入logstash并一致地获取以下字段:

  • 日志级别
  • 时间戳
  • 记录消息
  • 机器名称

感谢您提供的任何帮助。即使我可以只记录日志级别,时间戳和日志消息,这将是一个巨大的帮助。我真诚地感激它!

3 个答案:

答案 0 :(得分:23)

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

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

答案 1 :(得分:1)

On my blog我描述了如何将JSON消息发送到ElasticSearch,然后使用GROK解析它。 Click to see blog post with description and Java example 在帖子中你可以找到描述,但也可以使用示例(github上的完整项目)找到简单的maven项目。

希望它对你有所帮助。

答案 2 :(得分:1)

由于某些安全问题,似乎不推荐使用之前使用的SocketAppender解决方案。 当前推荐的解决方案是使用log4j fileAppender,然后将文件通过filebeat插件传递到logstash,然后进行过滤。 有关更多信息,您可以参考以下链接:

https://www.elastic.co/blog/log4j-input-logstash

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html