elasticsearch 如何访问Elasticsearch输出脚本字段内的@元数据
使用elasticsearch输出模块,我将许多更新操作的elasticsearch 如何访问Elasticsearch输出脚本字段内的@元数据,elasticsearch,logstash,elasticsearch,Logstash,使用elasticsearch输出模块,我将许多更新操作的doc\u as\u upsert设置为true。我正在使用@metadata功能来存储我不想升级到ES中的字段 但是,我在访问Elasticsearch脚本函数中@metadata内的字段时遇到问题。下面的脚本确保URL数组小于1001,并确保添加的新URL对数组是唯一的: output { elasticsearch{ hosts => "***************" user => "*
doc\u as\u upsert
设置为true
。我正在使用@metadata功能来存储我不想升级到ES中的字段
但是,我在访问Elasticsearch脚本函数中@metadata内的字段时遇到问题。下面的脚本确保URL
数组小于1001,并确保添加的新URL对数组是唯一的:
output {
elasticsearch{
hosts => "***************"
user => "****"
index => "****"
password => "*********"
document_type => "document"
document_id => "%{[@metadata][domain]}"
action => "update"
script => 'if(ctx._source.urls.length < 1001){ boolean match = false; for (url in ctx._source.urls){if (url == params.event.get("[@metadata][url]")){match = true;}} if(match==false){ctx._source.urls.add(params.event.get("[@metadata][url]"));}}'
doc_as_upsert => true
}
}
输出{
弹性搜索{
hosts=>“**************”
用户=>“***”
索引=>“***”
密码=>“********”
文档类型=>“文档”
文档id=>“%{[@metadata][domain]}”
操作=>“更新”
脚本=>'if(ctx.\u source.url.length<1001){boolean match=false;for(ctx.\u source.url中的url){if(url==params.event.get(“[@metadata][url]”)get(“[@metadata][url]”){match=true;}if(match==false){ctx.\u source url.add(params.event.get(“[@metadata][url]”);}
doc\u as\u upsert=>true
}
}
在ES内部,URL值被简单地附加为NULL。我查看了rubydebug内部的url元数据字段,它肯定会被添加。我无法直接引用元数据%{[@metadata][domain]}
,因为生成的脚本太多,导致脚本编译错误
有没有办法访问elasticsearch输出插件脚本函数中的metadata.url
字段
谢谢大家! 您不能将
@metadata
字段与输出插件一起使用,它们不会被发送(这是元数据的目的)
因此,您可以添加一个mutate过滤器或ruby过滤器,将元数据字段复制到事件数据:
ruby {
code => 'event.get("[@metadata][rabbitmq_headers]").each {|k,v| event.set(k, v)}'
}