2014-04-04 59 views
23

我是LogStash的新手。我有一些從Log4J中的Java應用程序寫入的日誌。我正在嘗試將這些日誌存入ElasticSearch。對於我的生活,我似乎無法讓它始終如一地工作。目前,我正在使用以下logstash配置:使用Log4J和LogStash

input { 
    file { 
    type => "log4j" 
    path => "/home/ubuntu/logs/application.log" 
    } 
} 
filter { 
    grok { 
    type => "log4j" 
    add_tag => [ "ApplicationName" ] 
    match => [ "message", "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level}" ] 
    } 
} 
output { 
    elasticsearch { 
    protocol => "http" 
    codec => "plain" 
    host => "[myIpAddress]" 
    port => "[myPort]" 
    } 
} 

此配置似乎被擊中或未命中。我不知道爲什麼。例如,我有兩條消息。一個工作,另一個拋出解析失敗。然而,我不知道爲什麼。以下是消息及其各自的結果:

Tags     Message 
------     ------- 
["_grokparsefailure"] 2014-04-04 20:14:11,613 TRACE c.g.w.MyJavaClass [pool-2- 
         thread-6] message was null from https://domain.com/id-1/env- 
         MethodName 

["ApplicationName"] 2014-04-04 20:14:11,960 TRACE c.g.w.MyJavaClass [pool-2- 
         thread-4] message was null from https://domain.com/id-1/stable- 
         MethodName 

的一個與[「應用程序名稱」]有timestamplevel我的自定義字段。但是,使用[「_grokparsefailure」]的條目沒有我的自定義字段。奇怪的是,日誌幾乎與上面的消息欄中顯示的相同。這真令我困惑,但我不知道如何弄清楚問題是什麼或如何超越它。有誰知道我怎麼可以用進口的log4j登錄到logstash並獲得以下字段一致:

  • 日誌級別
  • 時間戳
  • 日誌消息
  • 機名稱
  • 螺紋

感謝您提供任何幫助。即使我只能記錄日誌級別,時間戳和日誌消息,這也是一個巨大的幫助。我衷心感謝!

+3

我看不出你神交模式永遠匹配。你在%{LOGLEVEL:level}之前有兩個空格「如果你必須處理可變數目的空格,用\ s +而不是空格來匹配一個或多個空格,並且在grok調試器上使用+1回答 – Alcanzar

回答

22

我建議使用log4j套接字偵聽器logstash和log4j套接字appender。

Logstash的conf:

input { 
    log4j { 
    mode => server 
    host => "0.0.0.0" 
    port => [logstash_port] 
    type => "log4j" 
    } 
} 
output { 
    elasticsearch { 
    protocol => "http" 
    host => "[myIpAddress]" 
    port => "[myPort]" 
    } 
} 

log4j.properties:

log4j.rootLogger=[myAppender] 
log4j.appender.[myAppender]=org.apache.log4j.net.SocketAppender 
log4j.appender.[myAppender].port=[log4j_port] 
log4j.appender.[myAppender].remoteHost=[logstash_host] 

有更多信息的logstash文檔爲自己的log4j輸入:http://logstash.net/docs/1.4.2/inputs/log4j

+0

我會推薦與你一樣,但現在,當發送的消息數量非常大時,我開始有問題了。請記住,log4j從TCP連接讀取事件。 – alicia

+0

我認爲log4j_port在log4j.properties文件中應該是logstash_port。 – imesh

+0

''[logstash_host]'必須是本地主機嗎?我們必須指定ip還是主機名可以? – AbtPst