我是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
的一個與[「應用程序名稱」]有timestamp
和level
我的自定義字段。但是,使用[「_grokparsefailure」]的條目沒有我的自定義字段。奇怪的是,日誌幾乎與上面的消息欄中顯示的相同。這真令我困惑,但我不知道如何弄清楚問題是什麼或如何超越它。有誰知道我怎麼可以用進口的log4j登錄到logstash並獲得以下字段一致:
- 日誌級別
- 時間戳
- 日誌消息
- 機名稱
- 螺紋
感謝您提供任何幫助。即使我只能記錄日誌級別,時間戳和日誌消息,這也是一個巨大的幫助。我衷心感謝!
我看不出你神交模式永遠匹配。你在%{LOGLEVEL:level}之前有兩個空格「如果你必須處理可變數目的空格,用\ s +而不是空格來匹配一個或多個空格,並且在grok調試器上使用+1回答 – Alcanzar