我正在尝试编写一个管道来将文件加载到logstash中。我的设置需要将输入部分中的type
字段指定为Run multiple independent logstash config files with input,filter and output。遗憾的是,源数据已包含字段type
,并且看起来源数据中的值与输入配置提供的值冲突。
源数据包含一个json数组,如下所示
[
{"key1":"obj1", "type":"looks like a bad choose for a key name"},
{"key1":"obj2", "type":"you can say that again"}
]
我的管道如下所示
input {
exec {
command => "cat /path/file_containing_above_json_array.txt"
codec => "json"
type => "typeSpecifiedInInput"
interval => 3600
}
}
output {
if[type] == "typeSpecifiedInInput" {
stdout {
codec => rubydebug
}
}
}
输出永远不会被调用,因为type
已设置为源数据提供的值,而不是输入部分提供的值。
如何设置输入管道以避免此冲突?
森
答案 0 :(得分:1)
在输入中创建一个新字段,而不是重复使用'type'。 exec {}输入有add_field可用。
答案 1 :(得分:0)
以下是使用add_field
代替type
的最终渠道。添加了一个过滤阶段以清理文档,以便type
字段包含写入ElasticSearch(class of similar documents)所需的预期值。来自原始JSON文档的type
值在密钥typeSpecifiedFromDoc
中得到保留。必须将mutate步骤分解为单独的阶段,以便替换在原始值之前不会影响type
已添加为新字段typeSpecifiedFromDoc
。
input {
exec {
command => "cat /path/file_containing_above_json_array.txt"
codec => "json"
add_field => ["msgType", "typeSpecifiedInInput"]
interval => 3600
}
}
filter {
if[msgType] == "typeSpecifiedInInput" {
mutate {
add_field => ["typeSpecifiedFromDoc", "%{type}"]
}
mutate {
replace => ["type", "%{msgType}"]
remove_field => ["msgType"]
}
}
}
output {
if[type] == "typeSpecifiedInInput" {
stdout {
codec => rubydebug
}
}
}