将Log4J与LogStash一起使用

use*_*584 28 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]"
  }
}
Run Code Online (Sandbox Code Playgroud)

这种配置似乎很受欢迎.我不知道为什么.例如,我有两条消息.一个工作,另一个抛出解析失败.然而,我不确定为什么.以下是消息及其各自的结果:

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
Run Code Online (Sandbox Code Playgroud)

带有["ApplicationName"]的那个有我的自定义字段timestamplevel.但是,带有["_grokparsefailure"]的条目没有我的自定义字段.奇怪的是,日志几乎相同,如上面的消息栏中所示.这真让我感到困惑,但是,我不知道如何弄清楚问题是什么或如何超越它.有谁知道我如何使用导入log4j日志到logstash并一致地获取以下字段:

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

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

小智 26

我建议使用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]"
  }
}
Run Code Online (Sandbox Code Playgroud)

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]
Run Code Online (Sandbox Code Playgroud)

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

  • 由于一些安全问题,该插件已被弃用:[来源](https://www.elastic.co/blog/log4j-input-logstash) (2认同)

小智 1

在我的博客上(编辑:删除死链接)我描述了如何将 JSON 消息发送到 ElasticSearch,然后使用 GROK 解析它。[点击查看带有描述和 Java 示例的博客文章][1] 在帖子中,您可以找到描述,也可以找到带有示例的简单 Maven 项目(完整项目位于 github 上)。

希望对您有帮助。