2014-11-24 177 views
0

我在Ubuntu 14.04上安裝了ELK。現在我想發送給我所有的jboss服務器日誌(使用log4j)。配置ELK + 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 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(控制檯和本地文件)工作正常。彈性搜索日誌顯示任何信息/活動。

編輯: 更多關於我的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

你有沒有證實Logstash實際收到任何東西(你可以用TCP流量嗅探器檢查)?如果用一個簡單的'stdout'輸出替換'elasticsearch'輸出來減少運動部件的數量呢? – 2014-11-24 11:58:35

+0

我做了你所說的。所以對於我在端口5000上使用'sniffit'的TCP流量,這沒有任何顯示......(使用sniffit是否可以?) 我改變了輸出,沒有任何反應。 – Guinoutortue 2014-11-24 13:25:27

+0

好的,這表明Log4j配置有問題。你如何在記錄器配置中引用LOGSTASH appender? – 2014-11-24 13:33:58

回答

2

我知道這是舊的文章,但有人可能會發現它很有用 - 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" 
    } 
    ... 
} 
0

您可以直接將它發送到Elastic在這種情況下。沒有理由首先通過LogStash。您可以輕鬆地使用過濾器來過濾掉郵件你不感興趣。

,如果你想使用它,我在這裏寫Log4J2 Elastic REST Appender此附加目的地。它能夠在將事件發送到Elastic之前根據事件的時間和/或事件數來緩衝日誌事件(使用_bulk API,以便一次發送)。 它已發佈到Maven Central,因此非常簡單。