Logstash -> Elasticsearch:更新文档@timestamp如果较新,则丢弃



使用logstash中的elasticsearch output,如果较新,如何仅更新日志消息的@timestamp

我不想重新索引整个文档,也不想将同一日志消息索引两次。

此外,如果@timestamp较旧,则不得更新/替换当前版本。

目前,我正在这样做:

filter {
    if ("cloned" in [tags]) {
        fingerprint {
            add_tag => [ "lastlogin" ]
            key     => "lastlogin"
            method  => "SHA1"
        }
    }
}
output {
    if ("cloned" in [tags]) {
        elasticsearch {
            action              => "update"
            doc_as_upsert       => true
            document_id         => "%{fingerprint}"
            index               => "lastlogin-%{+YYYY.MM}"
            sniffing            => true
            template_overwrite  => true
        }
    }
}

它类似于如何在从logstash索引到elasticsearch时删除重复的文档,但我不想总是更新message字段;只有当@timestamp字段更新时。

你不能从 Logstash 级别决定一个文档是否需要更新或什么都不做,这需要在 Elasticsearch 级别决定。这意味着您需要使用 _update API 进行试验和测试。

我建议看看 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html#upserts。这意味着,如果文档存在,则执行脚本(如果需要,可以检查@timestamp),否则upsert的内容将被视为新文档。

相关内容

  • 没有找到相关文章

最新更新