DockerコンテナーでいくつかのSpringBootアプリケーションを実行しています。ファイルにログを記録したくないので、代わりにコンソールにログを記録し、logspoutを使用してログをLogstashに転送しています。私が使用していますlogstash-logback-エンコーダをJSON形式のアプリケーションからのすべてのログをログに記録します。
これらとは別に、Spring Bootアプリケーションを起動する前にDockerコンテナーによって作成されるログ(コンソール出力)もいくつかあります。これらはJSON形式ではありません。
これらの両方に、LogspoutはLogstashに送信する前にメタデータ(コンテナー名、コンテナーIDなど)を追加します。以下は、両方の形式のログの例です。
<14> 1 2016-12-01T12:58:20Z 903c18d47759 com-test-myapp 31635 ---テストするアクティブプロファイルの設定
<14> 1 2016-12-01T13:08:13Z 903c18d47759 com-test-myapp 31635 --- {"@timestamp": "2016-12-01T13:08:13.651 + 00:00"、 "@ version":1 、 "message": "一部のログメッセージがここに表示されます"、 "logger_name": "com.test.myapp.MyClass"、 "thread_name": "http-nio-8080-exec-1"、 "level": "DEBUG" 、 "level_value":10000、 "HOSTNAME": "903c18d47759"}
以下は私のLogstashgrok構成です。
input {
tcp {
port => 5000
type => "logspout-syslog-tcp"
}
}
filter {
if [type] == "logspout-syslog-tcp" {
grok {
match => {
"message" => [
"<%{NUMBER:syslogPriority}>1 %{TIMESTAMP_ISO8601:eventTimestamp} %{BASE16NUM:containerId} %{DATA:containerName} %{NUMBER:containerPort} - - %{DATA:jsonLog}",
"<%{NUMBER:syslogPriority}>1 %{TIMESTAMP_ISO8601:eventTimestamp} %{BASE16NUM:containerId} %{DATA:containerName} %{NUMBER:containerPort} - - %{DATA:regularLog}"
]
}
}
json {
source => "jsonLog"
target => "parsedJson"
remove_field=>["jsonLog"]
}
mutate {
add_field => {
"level" => "%{[parsedJson][level]}"
"thread" => "%{[parsedJson][thread_name]}"
"logger" => "%{[parsedJson][logger_name]}"
"message" => ["%{[parsedJson][message]}"]
}
}
}
}
output {
elasticsearch { hosts => ["localhost:9200"] }
stdout { codec => rubydebug }
}
これに基づいて、JSONの各フィールドをElasticsearch / Kibanaのフィルターとして使用できるようにしたいと考えていました。しかし、私はそれらのフィールドの値を取得することができません。Kibanaでは次のように表示されます。
ここで何が欠けているのかわかりません。JSONからフィールドを抽出するにはどうすればよいですか?また、grokフィルターはJSONログと非JSONログの両方を処理するために正しいですか?
ありがとう、アヌープ
問題は%{DATA:jsonLog}
部品にあります。DATAパターン.*?
は貪欲ではないため(ここを参照)、何も取得せず、jsonLog
フィールドを作成しません。GREEDYDATA
代わりにパターンを使用する必要があります。
パターンをテストするには、http://grokconstructor.appspot.com/do/match#resultを参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加