已忽略LogStash转换筛选器

已忽略LogStash转换筛选器,logstash,Logstash,我正在尝试添加一个简单的转换筛选器,以转换应用程序名称中的端口号: filter { mutate { add_field => { "[source][application]" => "%{[source][port]}" } } translate { field => "[source][port]" destin

我正在尝试添加一个简单的转换筛选器,以转换应用程序名称中的端口号:

filter {

    mutate
    {
      add_field => { "[source][application]" => "%{[source][port]}" }
    }
    
    translate 
    {
        field => "[source][port]"
        destination => "[source][application]"
        dictionary => {
          "80" => "HTTP"
          "443" => "SSL"
          "5432" => "Postgresql"
        }
        fallback => "__NO_MATCH"
    }

}
变异部分正确完成,但完全忽略了平移过滤器。 在[source][application]中,我得到的是原始端口号,而不是应用程序名,甚至没有匹配项

我做错了什么?是否存在类型问题


谢谢

如果要将
翻译
过滤器的结果写入文档中已存在的字段,则需要设置
覆盖=>真
,如果不设置,过滤器将跳过翻译。[]

但在您的情况下,最好不要使用
mutate
过滤器来添加字段
source.application
,因为此字段将被translate过滤器覆盖,因此不需要它

只要使用translate过滤器,它就会工作

filter {
    translate 
    {
        field => "[source][port]"
        destination => "[source][application]"
        dictionary => {
          "80" => "HTTP"
          "443" => "SSL"
          "5432" => "Postgresql"
        }
        fallback => "__NO_MATCH"
    }
}

如果要将
translate
过滤器的结果写入文档中已存在的字段,则需要设置
override=>true
,如果未设置,过滤器将跳过翻译。[]

但在您的情况下,最好不要使用
mutate
过滤器来添加字段
source.application
,因为此字段将被translate过滤器覆盖,因此不需要它

只要使用translate过滤器,它就会工作

filter {
    translate 
    {
        field => "[source][port]"
        destination => "[source][application]"
        dictionary => {
          "80" => "HTTP"
          "443" => "SSL"
          "5432" => "Postgresql"
        }
        fallback => "__NO_MATCH"
    }
}

您是否尝试过不使用目的地?它将创建一个字段转换,如果是这种情况,json中子字段的目标可能不起作用?删除目标参数我得到了正确的值,但作为_source的直接子级,您是否尝试过不使用目标?它将创建一个字段转换,如果是这种情况,json中子字段的目标可能不起作用?删除目标参数我得到了正确的值,但作为_source的直接子项