elasticsearch Logstash->;Elasticsearch:更新文档@时间戳(如果较新),如果较旧则放弃,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch Logstash->;Elasticsearch:更新文档@时间戳(如果较新),如果较旧则放弃,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch Logstash->;Elasticsearch:更新文档@时间戳(如果较新),如果较旧则放弃

elasticsearch Logstash->;Elasticsearch:更新文档@时间戳(如果较新),如果较旧则放弃,elasticsearch,logstash,elasticsearch,Logstash,使用logstash中的elasticsearch输出,如果日志消息较新,如何仅更新@时间戳 我不想对整个文档重新编制索引,也不想对同一日志消息编制两次索引 此外,如果@timestamp较旧,则不得更新/替换当前版本 目前,我正在这样做: filter { if ("cloned" in [tags]) { fingerprint { add_tag => [ "lastlogin" ] key =>

使用
logstash
中的
elasticsearch输出
,如果日志消息较新,如何仅更新
@时间戳

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

此外,如果
@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
        }
    }
}


它与类似,但我不想总是更新
消息
字段;仅当
@timestamp
字段较新时。

您无法从日志存储级别决定是否需要更新文档或不执行任何操作,这需要在Elasticsearch级别决定。这意味着您需要使用
\u update
API进行实验和测试

我建议你看看。也就是说,如果文档存在,则执行脚本(如果需要,您可以在脚本中检查
@timestamp
),否则
upsert
的内容将被视为新文档