elasticsearch 如果日志存储管道中不存在嵌套对象,则创建嵌套对象
在Logstash管道中,我试图验证嵌套对象是否存在。如果没有,我想创建它并初始化它的字段 以下是我的管道输出:elasticsearch 如果日志存储管道中不存在嵌套对象,则创建嵌套对象,elasticsearch,logstash,elasticsearch,Logstash,在Logstash管道中,我试图验证嵌套对象是否存在。如果没有,我想创建它并初始化它的字段 以下是我的管道输出: output { elasticsearch { hosts => ["${ELASTICSEARCH_HOST:localhost:9200}"] user => "${ELASTICSEARCH_USERNAME:elastic}" password => "
output {
elasticsearch {
hosts => ["${ELASTICSEARCH_HOST:localhost:9200}"]
user => "${ELASTICSEARCH_USERNAME:elastic}"
password => "${ELASTICSEARCH_PASSWORD:password}"
index => "shape_idx"
action => "update"
document_id => "%{shapeId}"
script_type => "inline"
scripted_upsert => true
document_type => "shape"
script => '
if (ctx._source["realViews"]) {
ctx._source.realViews.all=0;
ctx._source.realViews.desktop=0;
ctx._source.realViews.phone=0;
ctx._source.realViews.tablet=0;
}
ctx._source.realViews.all = (ctx._source.realViews.all ?:0) + params.event.deviceCounter.all;
ctx._source.realViews.desktop = (ctx._source.realViews.desktop ?:0) + params.event.deviceCounter.desktop;
ctx._source.realViews.phone = (ctx._source.realViews.phone ?:0) + params.event.deviceCounter.phone;
ctx._source.realViews.tablet = (ctx._source.realViews.tablet ?:0) + params.event.deviceCounter.tablet;
'
}
}
不幸的是,我的管道无声地失败了,你知道吗?
作为记录,我使用的是Logstashg 7.1.1和Elasticsearch 5.6.16。突变应该发生在突变过滤器中,只需在那里添加一个复选框,并在需要时在过滤器中添加字段 试着提醒自己你有输入/过滤/输出,让每个部分都做它应该做的事情 让输入只在管道中输入数据,如果您真的愿意,可以添加一个字段(如果您在同一管道中通过同一过滤器使用多个输入,这很有用) 让过滤器执行您想要执行的任何操作,这包括检查字段是否存在,然后对其执行操作
让输出只是输出(如果语句有条件输出可以是它的一部分,但没有进一步的处理)。有什么理由在输出中使用脚本而不是在管道中使用变异过滤器?这可以通过条件和变异过滤器轻松完成。