【问题标题】:Logstash doc_as_upsert cross index in Elasticsearch to eliminate duplicatesElasticsearch 中的 Logstash doc_as_upsert 交叉索引以消除重复项
【发布时间】:2016-12-10 00:25:07
【问题描述】:

我有一个 logstash 配置,它在输出块中使用以下内容来尝试减少重复。

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 工作跨索引?这些都是相同类型的文档,它们将简单地应用于与“usage-*”匹配的每个索引

【问题讨论】:

    标签: elasticsearch logstash elastic-stack


    【解决方案1】:

    一个新的索引是一个全新的键空间,没有办法告诉 ES 不要在两个不同的索引中索引两个具有相同 ID 的文档。

    但是,您可以通过在管道中添加 elasticsearch filter 来防止这种情况发生,该管道将在所有索引中查找文档,如果找到,则可以删除该事件。

    这样就可以了(注意usages 将是一个跨越所有usage-* 索引的别名):

    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 {}
        }
    }
    

    【讨论】:

    • 我注意到集群上的负载在安装后增加了很多。但到目前为止,它似乎奏效了!
    • 是的,因为现在对于通过 Logstash 的每个事件,都会对您的 ES 进行查询以验证该事件是否已经存在。
    • 为了减少搜索空间,我添加了一个 ruby​​ 过滤器来获取昨天的日期。我只担心索引名称滚动到第二天时可能出现的欺骗。但是,似乎在弹性搜索过滤器中,它没有扩展字段:elasticsearch { hosts => ["fmyelastic04.fm.intel.com:9204"] index => 'monitoring-cama-usage-"%{[@metadata][yesterday]}"' query => "_id:%{[@metadata][fingerprint]}" fields => {"_id" => "id_found"} }
    • 嗨@anthozep,在我的情况下,请求发布到昨天的索引并响应发布到今天的索引。所以我想关联昨天索引中的请求和响应。有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 2021-11-29
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    相关资源
    最近更新 更多