我正在使用logstash处理日志文件。我的日志文件中的字段之一是日期类型,其格式为:yyyyMMddHHmmssSSS
我将我的日志文件的每一行读入Elasticsearch的索引中的文档中。我的日志文件中的示例行如下所示:
{
"_source": {
"sku": "0000000",
"time": "20180813124704961",
"location": "Chicago",
"quantity": 5
}
}
反过来,我索引中的文档结构如下:
elasticsearch {
hosts => "http://localhost:9200"
index => "logstash"
scripted_upsert => true
script => "if(ctx.op == create || params.event.get('time').compareTo(ctx._source.time) > 0) ctx._source = params.event"
}
我的日志一直在更新,因此我想防止索引中的数据过时。在下一次处理日志文件时,如何检查索引中的时间字段是否比同一行旧或新?
例如,如果日志文件同一行中的时间字段更改为比上述时间更旧,则文档不应更新,但是,如果时间字段值较新,则应该更新已更新。
这是我尝试过的(logstash.conf):
tr
非常感谢。
答案 0 :(得分:0)
我为那些也可能遇到类似问题的人发布了答案。
scripted_upsert => true
action => "update"
script_lang => "painless"
script_type => "inline"
script => "if(ctx.op == 'create' || params.event.time.compareTo(ctx._source.time) > 0) ctx._source = params.event;"
文档尚不十分清楚,但是您可以通过params.event.YOUR_FIELD.compareTo
进入json直接访问文档中的字段,然后您可以对数据执行任意脚本。
Event
是默认变量名,但是您可以通过params