elasticsearch 在Elasticsearch中插入交叉索引以消除重复项
我有一个logstash配置,它在输出块中使用以下内容,试图减少重复elasticsearch 在Elasticsearch中插入交叉索引以消除重复项,elasticsearch,logstash,elastic-stack,elasticsearch,Logstash,Elastic Stack,我有一个logstash配置,它在输出块中使用以下内容,试图减少重复 output { if [type] == "usage" { elasticsearch { hosts => ["elastic4:9204"] index => "usage-%{+YYYY-MM-dd-HH}" doc
output {
if [type] == "usage" {
elasticsearch {
hosts => ["elastic4:9204"]
index => "usage-%{+YYYY-MM-dd-HH}"
document_id => "%{[@metadata][fingerprint]}"
action => "update"
doc_as_upsert => true
}
}
}
指纹是从两个唯一字段的SHA1散列计算出来的
当logstash在同一索引中看到相同的文档时,这一点就起作用了,但由于生成输入数据的命令没有可靠的不同文档出现率,logstash有时会在不同的日期戳索引中插入重复的文档
例如,logstash运行以获取输入的命令通常返回最后两个小时的数据。但是,由于我无法确定文档何时会出现/消失,因此我每十五分钟更新一次该命令
如果在同一小时内发生重复,则这是正常的。但是,当小时或日日期戳滚动时,文档仍然显示,elastic/logstash认为这是一个新文档
有没有办法使upsert工作交叉索引?这些都是相同类型的文档,它们只会应用于与“用法-*”匹配的每个索引。新索引是一个全新的键空间,无法告诉ES不在两个不同索引中索引具有相同ID的两个文档 但是,您可以通过向管道中添加一个索引来防止这种情况,该管道将在所有索引中查找文档,如果它找到一个索引,则可能会删除该事件 这样做可以(请注意,
usages
将是一个跨越所有usage-*
索引的别名):
我注意到集群上的负载在安装好之后增加了很多。但到目前为止,它似乎正在发挥作用!是的,因为现在对于通过Logstash的每个事件,都会对您的ES进行查询,以验证该事件是否已经存在。为了减少搜索空间,我添加了一个ruby筛选器以获取昨天的日期。我只担心索引名滚动到第二天时可能出现的重复。但是,在elasticsearch筛选器中,它似乎没有展开字段:
elasticsearch{hosts=>[“fmyelastic04.fm.intel.com:9204”]index=>'监视cama使用情况-“%{[@metadata][beday]}”query=>“\u id:%{[@metadata][fingerprint]}”字段=>{{u id=>“id_found”}
HI@anthozep,在我的例子中,request get publish to dayed index和response get publish to dayed index。所以我想在dayed index中将请求和响应关联起来。有什么建议吗?
filter {
elasticsearch {
hosts => ["elastic4:9204"]
index => "usages"
query => "_id:%{[@metadata][fingerprint]}"
fields => {"_id" => "other_id"}
}
# if the document was found, drop this one
if [other_id] {
drop {}
}
}