首页 > 解决方案 > 使用 elasticsearch 和 logstash 删除输入标签字段

问题描述

我正在使用logstash发送到elasticsearch,有人知道如何删除[tags]字段吗?我正在使用此字段来过滤每个 jdbc 输入应输入的位置,我在下面留下一个示例。我想要的是不要将该字段插入到elasticsearch中,我已经尝试过remove_field,但是在使用它时,它不会直接插入到elasticsearch中。

    input {
      jdbc {
            jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/ifxjdbc-4.50.3.jar"
            jdbc_driver_class => "com.informix.jdbc.IfxDriver"
            jdbc_connection_string => "zzzz"
            jdbc_user => "zzz"
            jdbc_password => "zzz"
            schedule => "*/5 * * * * *"                       
            statement => "SELECT * FROM informix.test ORDER BY tes_id ASC"
            tags => "test_001"
      }
    }

    filter { 
      mutate {
          remove_field => [ "@version","@timestamp" ]
      }
    } 
output {

  if "test_001" in [tags] {

        # Para ELK
        elasticsearch {
              hosts => "localhost:9200"
              index => "test"
              document_type => "test"
        }
  }      
}

尝试这样做:

mutate { add_field => { "[@metadata][mitags]" => [tags]  }
           remove_field => [tags]
        } 

但它不会插入到弹性搜索中。

显然,elasticsearch 中的输入 [tags] 是作为数组创建的......

标签: elasticsearchlogstash-configurationlogstash-jdbc

解决方案


如果你想使用一个字段来过滤你的输出,你不能删除这个字段,它将被插入到 elasticsearch 中,除非你使用这个metadata字段,因为你似乎已经在尝试,但是add_field配置错误。

试试下面的管道。

input {
  jdbc {
      ... your jdbc config ...
    tags => "test_001"
  }
}
filter { 
    mutate {
        add_field => { "[@metadata][tags]" => "%{tags}" } 
    }
    mutate {
        remove_field => ["@version","@timestamp","tags"]
    }
} 
output {
    if "test_001" in [@metadata][tags] {
        elasticsearch {
            ... your elasticsearch output ...
        }
    }      
}

第一个 mutate 将在字段中添加您的标签[@metadata][tags],第二个将删除您的字段,包括tags,然后您可以根据[@metadata][tags]


推荐阅读