Logstash Elasticsearch输出批量插入与Elasticsearch过滤器冲突

时间:2017-08-23 14:09:17

标签: elasticsearch logstash

我遇到的问题是,我的日志数据和工作流程似乎与Elasticsearch输出批量插入的方式相冲突。

我要做的是使用Elasticsearch过滤器插件进行查找,以便在收到结束事件时查找启动事件。然而,问题在于事件通常彼此相邻或非常接近(在几行内)。执行Elasticsearch过滤器查找时,它将找不到相应的启动事件,因为由于输出批量的插入方式,它尚未发送到Elasticsearch。

供参考,工作流程如下:

input {
  beats {
    port => 5044
  }
}
filter {
  if [eventType] == "End" {
    elasticsearch {
      hosts => ["localhost:9200"]
      user => "logstash-es"
      password => "****"
      index => "logstash-*"
      query_template => "config/logstash-query.json"
      fields => [["event-data", "start-event-data"]]
    }
  }
}
output {
  elasticsearch {
    hosts => "[localhost:9200]"
    user => "logstash-es"
    password => "****"
    index => "%{[@metadata][beat]}"
    document_type => "%{[@metadata][type]}"
  }
}

如何强制Elasticsearch输出单独发送事件,以便Elasticsearch过滤器查找成功?

1 个答案:

答案 0 :(得分:0)

好的,我想我找到了答案。启动Logstash时,您可以使用以下标志设置批次大小:-b, - patchline.batch.size,可以设置为1.

例如:

.\bin\logstash.bat -f path/to/config.conf -b 1

我将这与以下标志耦合,-w, - pipeline.workers将其设置为1个工作程序,以便不按顺序处理事件并且-u, - pipeline.batch.delay增加创建批次之间的延迟。