Logstash始终在PipeLine中保留一条消息

时间:2016-07-01 10:07:59

标签: logstash logstash-grok logstash-configuration logstash-forwarder logstash-file

我正在使用Logstash来读取和解析文件中的日志,并将它们发送到基于Rest的API。我的托运人工作正常,但我遇到了一种奇怪的行为。

Version:
logstash-2.3.2

问题:

当Logstash发货人解析第一个日志条目时,它不会发送它,它会将其保留在管道中。当它解析第二个日志条目时,它会将第一个日志条目发送到API。因此,一条消息始终保留在管道中,并且不会向我的API发送。

每当我停止我的Logstash托运人流程时,它也会发送最后剩余的消息。所以,从某种意义上说,没有任何消息丢失,但托运人总是背后的一个信息。

问题: 为什么Logstash无法清除其管道并在收到后立即向API发送消息。

1 个答案:

答案 0 :(得分:1)

您应该粘贴您的logstash配置和日志格式以获得正确的答案,但无论您如何描述,您似乎都在使用多行插件。因此,从logstash 2.2开始,Codec中的multline插件有一个auto_flush_interval。基本上这个' auto_flush_interval'可以设置为几秒钟,如果多行输入插件在指定的秒数之前没有监听任何日志行,那么它会将管道中的输入挂起到您的API ......

例如,有关详细信息,请参阅:

input {
  file {
    path => "$LogstashFilePathValue"
    type => "DemandwareError"
    tags => "$EnvironmentName"
    start_position => "beginning"
    sincedb_path => "NUL"
    codec => multiline {
        pattern => "\A\[%{TIMESTAMP_ISO8601:demandware_timestamp} GMT\]"
        negate => true
        what => previous
        auto_flush_interval => 10
    }
  }
}

示例来自链接:https://github.com/elastic/logstash/issues/1482 有关auto_flush_interval的详细信息,请访问:https://www.elastic.co/guide/en/logstash/current/plugins-codecs-multiline.html#plugins-codecs-multiline-auto_flush_interval