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

时间:2016-07-07 21:33:35

标签: elasticsearch logstash

使用elasticsearch output中的logstash,如果更新,我如何更新日志消息的@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
        }
    }
}

它与How to deduplicate documents while indexing into elasticsearch from logstash类似,但我不想总是更新message字段;仅当@timestamp字段更新时。

1 个答案:

答案 0 :(得分:0)

您无法从Logstash级别决定是否需要更新文档或者不应该执行任何操作,这需要在Elasticsearch级别进行决定。这意味着您需要使用_update API进行实验和测试。

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