2015-04-14 212 views
3

我想實現一個使用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,它也行不通...我做錯了什麼?它似乎拒絕寫入該套接字出於某種原因,但它不抱怨任何事情。

回答

0

我對解決方案有點晚了,因爲我今天面臨同樣的問題。以防其他人將來遇到類似問題。

我設置的logback <configuration debug="true">

你會發現它無法寫入到輸出流。所以我查了一下LogstashEncoder使用的Logback庫的版本,他們是舊版本的1.1.6,我使用的是1.2.1。我切換到舊版本,一切正常。

1

在catalina.out中查看logbacks啓動日誌。還要確保你沒有到位任何防火牆(或安全組,如果您在AWS是)

從Tomcat /的logback發送日誌時logstach

tcp { 
     port => 4560 
     codec => json_lines 
     tags => ["app"] 
    } 

我也使用不同的編解碼器我在過濾器中使用此標記並輸出部分,因爲logback正在消耗來自多個位置的日誌。

相關問題