Docker kennt mehrere Logging-Treiber.
filter {
# Glassfish's server.log
mutate {
#type => "gflogs"
replace => ["message","%{log}"]
remove_field => ["log", "path"]
gsub => [
"message", "\r", "",
"message", "\n", ""
]
}
multiline {
#type => "gflogs"
pattern => "^\[\#\|\d{4}"
negate => true
what => "previous"
stream_identity => "%{host}.%{container_id}"
}
}
output {
lumberjack {
hosts => [ "localhost" ]
port => 5043
ssl_certificate => "/opt/logstash/logstash-2.3.4/config/ssl/logstash-forwarder.crt"
codec => "json"
}
}
grep -vE "^$|^#" /etc/default/docker
DOCKER_OPTS="-H unix:///var/run/docker.sock -H tcp://127.0.0.1:2375 --log-driver=syslog --log-opt=syslog-address=udp://127.0.0.1:25826 --log-opt tag={{.Name}}"
Wenn jetzt Container gestartet werden, werden sie per default ihr Logmessages per UDP nach Localhost, Port 25826, schicken. Dort sollte ein Service lauschen, der das Syslog-Protokoll versteht.
Logstash versteht das Syslog-Protokoll und kann daher als Syslog-Ersatz benutzt werden.
output {
lumberjack {
hosts => [ "localhost" ]
port => 5043
ssl_certificate => "/opt/logstash/config/ssl/logstash-forwarder.crt"
codec => "json"
}
}
Logstash versteht das GELF-Protokoll und kann daher als Graylog-Ersatz benutzt werden.
# Glassfish's server.log, exception messages take several lines
filter {
multiline {
pattern => "^\[\#"
negate => true
what => "previous"
stream_identity => "%{host}.%{container_id}"
}
}