我正在尝试使用 ELK 堆栈实现集中式日志服务器:Elasticsearch、Logstash、Kibana。它会从许多应用程序接收日志。 基本上我有一个使用具有以下配置的 logback 的 Tomcat 应用程序:
<appender name="ROLLING"
class="ch.qos.logback.core.rolling.RollingFileAppender">
[...]
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<remoteHost>my_remote_host</remoteHost>
<port>5000</port>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="DEBUG">
<appender-ref ref="ROLLING" />
<appender-ref ref="STDOUT" />
<appender-ref ref="stash" />
</root>
所以理论上这应该通过 TCP 发送所有 logback 日志... 在 my_remote_host 上,我部署了 elasticsearch、logstash 和 kibana。它们似乎都有效。 这是 logstash 的配置:
input {
stdin {
type => "human"
}
tcp {
port => 5000
codec => "json"
mode => "server"
}
}
output {
stdout {}
elasticsearch {
host => "my_remote_host"
}
}
如果我在我的 logstash 实例中向标准输入输入内容,它会成功地为我的输入建立索引。此外,如果我通过 http 向 my_remote_host:5000 发送请求,它会成功记录收到的数据。
问题是 logback 似乎没有使用 LogstashTcpSocketAppender 发送任何数据。即使使用简单的 SocketAppender,它也不起作用......我做错了什么吗?它似乎出于某种原因拒绝写入该套接字,但它没有提示任何事情。
最佳答案
在 catalina.out 中查找 logbacks 启动日志。还要确保您没有任何防火墙(如果您在 aws 中,则没有安全组)
在将日志从 tomcat/logback 发送到 logstach 时,我也使用了不同的编解码器
tcp {
port => 4560
codec => json_lines
tags => ["app"]
}
我在过滤器和输出部分使用这个标签,因为 logback 从几个地方消耗日志。
关于java - 将 Tomcat 日志发送到 Logstash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29630256/