【发布时间】:2016-03-08 15:07:32
【问题描述】:
我在运行 docker 容器的集群中运行 ELK(Elasticsearch、Logstash、Kibana)。这些容器通过 GELF 端点将日志发送到 Logstash。
docker run --log-driver=gelf --log-opt gelf-address=udp://somehost:12201 -ti my-app:latest
然后我在 Logstash 中处理日志。在这里,我想折叠多行消息并将它们合并到一个事件中(在我的例子中是 Java 异常)。我的配置是:
input {
gelf {}
}
filter{
multiline {
pattern => "^%{TIMESTAMP_ISO8601}"
negate => true
what => "previous"
source => "short_message"
}
}
output {
stdout { codec => rubydebug }
}
当我处理来自一个 docker 容器的日志时,它可以完美运行,但是对于两个或更多它不起作用,因为它会折叠两个(或多个)日志流的消息。
我希望,在输入中设置多行将解决问题
input {
gelf {
filter{
multiline {
pattern => "^%{TIMESTAMP_ISO8601}"
negate => true
what => "previous"
}
}
}
但多行在此设置下无法正常工作(似乎是因为bug)。有什么建议?谢谢。
我正在使用:Docker 1.9.1、Logstash 2.1
【问题讨论】:
标签: docker logstash elastic-stack