これを行う必要がある他の人を支援するためだけに、Filebeat を使用してログを送信できます。@brice-argenson のコンテナーを使用しますが、SSL サポートが必要だったので、ローカルにインストールされた Filebeat インスタンスを使用しました。
filebeat のプロスペクターは次のとおりです (他のコンテナーについても繰り返します)。
- input_type: log
paths:
- /var/lib/docker/containers/<guid>/*.log
document_type: docker_log
fields:
dockercontainer: container_name
更新時に変更される可能性があるため、GUID を知る必要があるのは少し面倒です。
logstash サーバーで、logstash の通常の filebeat 入力ソースをセットアップし、次のようなフィルターを使用します。
filter {
if [type] == "docker_log" {
json {
source => "message"
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
mutate {
rename => { "log" => "message" }
}
date {
match => [ "time", "ISO8601" ]
}
}
}
これにより、Docker ログから JSON が解析され、タイムスタンプが Docker によって報告されたものに設定されます。
nginx Docker イメージからログを読み取る場合は、次のフィルターも追加できます。
filter {
if [fields][dockercontainer] == "nginx" {
grok {
match => { "message" => "(?m)%{IPORHOST:targethost} %{COMBINEDAPACHELOG}" }
}
mutate {
convert => { "[bytes]" => "integer" }
convert => { "[response]" => "integer" }
}
mutate {
rename => { "bytes" => "http_streamlen" }
rename => { "response" => "http_statuscode" }
}
}
}
変換/名前変更はオプションですが、COMBINEDAPACHELOG
これらの値を整数にキャストしない式の見落としが修正され、Kibana での集約に使用できなくなります。