我有一个json事件进入logstash,如下所示(每个事件中的值不同):
{
"metadata":{
"app_type":"Foo",
"app_namespace":"System.Bar"
"json_string":"{\"test\":true}"
}
}
我希望我的logstash过滤器输出以下内容到elasticsearch(我不担心修剪现有字段):
{
"app_event":{
"foo":{
"system_bar":{
"test":true
}
}
}
}
我不知道如何使用字段值作为新字段名称的语法。
我尝试了几种不同的方法,在启动我的logstash示例时都导致了一个配置错误。我在我的示例中只包括了logstash.conf
的过滤器块,其余的配置都按预期工作。
1.
# note this one does not have replacement and lowercase values I want
filter {
json {
source => "[metadata][json_string]"
target => "[app_event][%{[metadata][app_type]}][%{[metadata][app_namespace]}]"
}
}
1.我试着用我需要的值创建变量,然后在目标中使用这些值
filter {
appType = "%{[metadata][instrument_type]}".downcase
appNamespace = "%{[metadata][app_namespace]}".downcase
appNamespace.gsub(".", "_")
json {
source => "[metadata][json_string]"
target => "[app_event][#{appType}][#{appNamespace}]"
}
}
1.只是为了确认其他一切都设置正确,这确实工作,但不包括动态生成的字段结构,我正在寻找。
filter {
json {
source => "[metadata][json_string]"
target => "[app_event]"
}
}
1条答案
按热度按时间nwwlzxa71#
json过滤器不会打印target的值,因此您不能以这些方式使用json过滤器。要使字段名称可变,您必须使用Ruby过滤器。请尝试