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"
}
}
在过滤阶段我想:
- 创建人物事件(将其标记为 P)
- 创建地址事件(将其标记为 A)
在输出阶段我想:
- 将 P 发送到 ES 中的 P 类型
- 在 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}"
}
}
我正在通过 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"
}
}
在过滤阶段我想:
- 创建人物事件(将其标记为 P)
- 创建地址事件(将其标记为 A)
在输出阶段我想:
- 将 P 发送到 ES 中的 P 类型
- 在 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}"
}
}