我遇到的问题是,我的日志数据和工作流程似乎与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过滤器查找成功?
答案 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增加创建批次之间的延迟。