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我用列名进一步简化了示例谢谢,您的合作伙伴管道做什么?不,每个处理器仅在一个字段上工作(在字段中指定的字段
)