使用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
字段更新时。
答案 0 :(得分:0)
您无法从Logstash级别决定是否需要更新文档或者不应该执行任何操作,这需要在Elasticsearch级别进行决定。这意味着您需要使用_update
API进行实验和测试。
我建议查看https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html#upserts。这意味着,如果文档存在,则执行脚本(如果需要,可以检查@timestamp
),否则upsert
的内容将被视为新文档。