当前位置:  开发笔记 > 后端 > 正文

ELK处理来自多个泊坞窗图像的多行日志

如何解决《ELK处理来自多个泊坞窗图像的多行日志》经验,为你挑选了1个好方法。

我正在运行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



1> Toni Van de ..:

我们使用多行过滤选项'stream_identity'解决了这个问题.

流标识是多行过滤器如何确定事件属于哪个流.这通常用于区分来自同一文件输入中的多个文件的事件,或来自tcp输入的多个连接.

https://www.elastic.co/guide/en/logstash/current/plugins-filters-multiline.html#plugins-filters-multiline-stream_identity

当您使用Gelf时,您可以使用host和container_id来唯一标识消息:

filter {

  multiline {
    pattern => "^%{TIMESTAMP_ISO8601}"
    negate => true
    what => "previous"
    source => "short_message"
    stream_identity => "%{host}.%{container_id}"
  }
}

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有