elasticsearch 如果日志存储管道中不存在嵌套对象,则创建嵌套对象,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch 如果日志存储管道中不存在嵌套对象,则创建嵌套对象,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch 如果日志存储管道中不存在嵌套对象,则创建嵌套对象

elasticsearch 如果日志存储管道中不存在嵌套对象,则创建嵌套对象,elasticsearch,logstash,elasticsearch,Logstash,在Logstash管道中,我试图验证嵌套对象是否存在。如果没有,我想创建它并初始化它的字段 以下是我的管道输出: output { elasticsearch { hosts => ["${ELASTICSEARCH_HOST:localhost:9200}"] user => "${ELASTICSEARCH_USERNAME:elastic}" password => "

在Logstash管道中,我试图验证嵌套对象是否存在。如果没有,我想创建它并初始化它的字段

以下是我的管道输出:

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。

突变应该发生在突变过滤器中,只需在那里添加一个复选框,并在需要时在过滤器中添加字段

试着提醒自己你有输入/过滤/输出,让每个部分都做它应该做的事情

让输入只在管道中输入数据,如果您真的愿意,可以添加一个字段(如果您在同一管道中通过同一过滤器使用多个输入,这很有用)

让过滤器执行您想要执行的任何操作,这包括检查字段是否存在,然后对其执行操作


让输出只是输出(如果语句有条件输出可以是它的一部分,但没有进一步的处理)。

有什么理由在输出中使用脚本而不是在管道中使用变异过滤器?这可以通过条件和变异过滤器轻松完成。