elasticsearch Logstash-指定多个管道,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch Logstash-指定多个管道,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch Logstash-指定多个管道

elasticsearch Logstash-指定多个管道,elasticsearch,logstash,elasticsearch,Logstash,我希望以不同的方式处理不同的字段 我有两条管道。一个是处理布尔值,另一个是将字符串转换为数组 output { stdout { codec => rubydebug } elasticsearch { action => "index" hosts => ["127.0.0.1:9200"] index => "mini_system" document_id =&

我希望以不同的方式处理不同的字段

我有两条管道。一个是处理布尔值,另一个是将字符串转换为数组

 output {
    stdout {
        codec => rubydebug
    }
    elasticsearch {
        action => "index"
        hosts => ["127.0.0.1:9200"]
        index => "mini_system"
        document_id => "%{mini_system_key}"
        if [source] == "secure_flag" {
            pipeline => "bool-pipeline"
        } else if "partners" == %{FIELD} {
            pipeline => "partners-pipeline"
        }
    }
}
我正在努力做到这一点。但我无法做到这一点,也找不到参考资料

样本文件:

key,partners,secure_flag,date_added
5369922730525,"1002300,1009747,12359,2285459",FALSE,2020-03-31T14:00:00Z    
2218100624,,FALSE,2020-03-31T14:00:00Z
这里,

“1002300100974123592285459”是合作伙伴。 FALSE是安全标志

合作伙伴管道:

{
  "description": "Converts \"a,b,c\" to [\"a\", \"b\",\"c\"]",
  "processors" : [
    {
      "split" : {
        "field" : "partners",
        "separator": ",",
        "ignore_missing": true
      }
    }
  ]
}
PUT _ingest/pipeline/mini-pipeline
{
  "processors" : [
    {
      "convert" : {
        "field" : "secure_flag",
        "type": "boolean",
        "ignore_missing": true
      }
    },
    {
      "split" : {
        "field" : "partners",
        "separator": ",",
        "ignore_missing": true
      }
    }
  ]
}

您不能在插件配置中应用逻辑,但使用if/else逻辑肯定可以有多个输出:

output {
    stdout {
        codec => rubydebug
    }
    if [source] == "secure_flag" {
        elasticsearch {
            action => "index"
            hosts => ["127.0.0.1:9200"]
            index => "mini_system"
            document_id => "%{mini_system_key}"
            pipeline => "bool-pipeline"
        }
    } else if [field_xyz] == "partners" {
        elasticsearch {
            action => "index"
            hosts => ["127.0.0.1:9200"]
            index => "mini_system"
            document_id => "%{mini_system_key}"
            pipeline => "partners-pipeline"
        }
    }
}
更新:

实际上,您不需要任何逻辑,只需在同一管道中添加两个处理器:

{
  "description": "Converts \"a,b,c\" to [\"a\", \"b\",\"c\"]",
  "processors" : [
    {
      "split" : {
        "field" : "partners",
        "separator": ",",
        "ignore_missing": true
      }
    }
  ]
}
PUT _ingest/pipeline/mini-pipeline
{
  "processors" : [
    {
      "convert" : {
        "field" : "secure_flag",
        "type": "boolean",
        "ignore_missing": true
      }
    },
    {
      "split" : {
        "field" : "partners",
        "separator": ",",
        "ignore_missing": true
      }
    }
  ]
}
然后简单地使用这个配置

output {
    stdout {
        codec => rubydebug
    }
    elasticsearch {
        action => "index"
        hosts => ["127.0.0.1:9200"]
        index => "mini_system"
        document_id => "%{mini_system_key}"
        pipeline => "mini-pipeline"
    }
}

你很快:)什么是
[source]
如果我的输入是CSV文件,这是否意味着CSV中的源字段?是的,可以是您要测试的文档中的任何字段谢谢。你能告诉我在哪里可以找到像
[source]、[tags]、[type]、@metadata]
这样的选项吗?这些都是我在许多帖子中看到的东西。但却找不到确切的东西<代码>[source]是当前正在处理的字段名的占位符。这些并没有什么特别之处,只是文档中的字段名。看这个:好吧,我有点困惑。实际上这里的
secure\u flag
partners
是必须应用管道的csv列。@Val请检查我的编辑谢谢,如果标题名为well@Val我用列名进一步简化了示例谢谢,您的
合作伙伴管道做什么?不,每个处理器仅在一个字段上工作(在
字段中指定的字段