我是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"]的那个有我的自定义字段timestamp和level.但是,带有["_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
小智 1
在我的博客上(编辑:删除死链接)我描述了如何将 JSON 消息发送到 ElasticSearch,然后使用 GROK 解析它。[点击查看带有描述和 Java 示例的博客文章][1] 在帖子中,您可以找到描述,也可以找到带有示例的简单 Maven 项目(完整项目位于 github 上)。
希望对您有帮助。