我想實現一個使用ELK堆棧的集中日誌服務器:Elasticsearch,Logstash,Kibana。它會從許多應用程序接收日誌。 基本上我有一個用下面的配置使用的logback一個Tomcat應用程序:發送Tomcat日誌到Logstash
<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,它也行不通...我做錯了什麼?它似乎拒絕寫入該套接字出於某種原因,但它不抱怨任何事情。