我在ubuntu服务器14.04上安装了ELK。现在我想发送给我所有的jboss服务器日志(使用log4j)。
logstash配置: 输入conf文件:
input {
log4j {
type => "log4j"
port => 5000
}
}
过滤conf文件:
filter {
if [type] == "log4j" {
grok {
match => {"message" => MY_GROK_PARSE}
}
}
}
和输出文件:
output {
elasticsearch {
embedded => true
}
}
完成log4j appender:
<appender name="LOGSTASH" class="org.apache.log4j.net.SocketAppender">
<param name="Port" value="5000"/>
<param name="RemoteHost" value="XXX.XXX.XXX.XXX"/> <!-- There is a real adress here ;-) -->
<param name="ReconnectionDelay" value="50000"/>
<param name="LocationInfo" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c{1}] %m%n" />
</layout>
</appender>
但这种配置没有任何反应。所以我不知道我误解了什么。 我的其他appender(控制台和本地文件)工作正常。 elasticsearch日志显示任何信息/活动。
修改: 有关我的jboss-log4j.xml的更多信息:
<appender name="Async" class="org.apache.log4j.AsyncAppender">
<appender-ref ref="FILE" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="LOGSTASH" />
</appender>
<root>
<priority value="INFO" />
<appender-ref ref="Async" />
</root>
答案 0 :(得分:3)
我知道这是一篇旧帖子,但有人可能觉得它很有用 - log4j SocketAppender无法使用布局,请参阅docs for SocketAppender
SocketAppenders不使用布局。它们将序列化的LoggingEvent对象发送到服务器端。
在logstash配置中,您也不需要额外的过滤器。 Logstash log4j插件最小配置就足够了
input {
log4j {
data_timeout => 5
host => "0.0.0.0"
mode => "server"
port => 4560
debug => true
type => "log4j"
}
...
}
答案 1 :(得分:1)
在这种情况下,您可以直接将其发送给Elastic。没有理由首先通过LogStash。您可以轻松使用过滤器过滤掉您不感兴趣的邮件。
如果你想使用它,我在这里写了这个appender Log4J2 Elastic REST Appender。它能够在将事件发送到Elastic之前根据时间和/或事件数缓冲日志事件(使用_bulk API,以便一次性发送所有事件)。 它已发布到Maven Central,所以它很直接。