logstash 过滤器如何为一个输入创建两个(或更多)输出

logstash filter how to create two (or above ) outputs for the one input

我正在通过 http poller 获取一个 json

  {
 "id":12345
 "name":"",
 "lastname":"",
 "age":12,
 "address":{"city":"XXXX" , "street":"ZZZZ" }
 }

我希望在我的输出中生成两个文档:

人:

 {
"id":12345
"name":"",
"lastname":"",
"age":12
  }

地址:

 {
"city":"XXXX" , 
"street":"ZZZZ" 
  }

意味着我在输入中得到了一个事件

在输入阶段得到一个输入:

input {
  http_poller {
    urls => {
      test1 => "http://localhost:8080"
    }
}

在过滤阶段我想:

  1. 创建人物事件(将其标记为 P)
  2. 创建地址事件(将其标记为 A)

在输出阶段我想:

  1. 将 P 发送到 ES 中的 P 类型
  2. 在 ES 中将 A 发送到 A 类型

您可以通过 clone filter 实现。

首先需要安装默认未绑定的插件:

bin/logstash-plugin install logstash-filter-clone

然后您可以像这样修改您的 Logstash 配置:

input {
  http_poller {
    urls => {
      test1 => "http://localhost:8080"
    }
    type => "A"
  }
}
filter {
    clone {
        clones => [ "P" ]
        add_tag => [ "P" ]
    }
    if [type] == "P" {
        mutate {
            remove_field => [ "address" ]
        }
    } else {
        mutate {
            add_tag => [ "A" ]
            remove_field => [ "id", "name", "lastname", "age" ]
        }
    }
}
output {
    elasticsearch {
        hosts => ["localhost:9200"]
        document_type => "%{type}"
    }
}