【发布时间】:2014-10-30 18:24:24
【问题描述】:
我正在尝试将 mutate 过滤器与 split 方法一起使用,以提取由 json 过滤器检索到的字段的一部分。但我没有找到如何利用分裂的结果。 这是我的 逻辑 配置(只有简单的 json 部分效果很好):
filter {
if [type] == "phperrors" {
json {
source => "message"
target => "phperror_log"
remove_field => "message"
add_tag => [ "php", "error" ]
}
mutate {
split => ["[phperror_log][server]", "."]
#if [phperror_log][server][1] {
add_field => [ "pop", "%{[phperror_log][server][1]}" ]
#}
}
}
}
正如我所说,json 部分运行良好,并且存在 phperror_log.server 字段(值类似于 node01.ny 或 node01.par 或 node02)。
但我想要的只是创建一个新字段,如果拆分创建一个包含 2 个字段的数组,并且我想我的 [phperror_log][server][1] 没有做正确的事情。
您有解决此类用例的任何线索、建议或最佳实践吗?
提前致谢
编辑:我使用应该与拆分一起使用的 conf 进行编辑...但是 if 不正确
根据 Alain 的提示和建议进行最后一次编辑:
filter {
if [type] == "phperrors" {
json {
source => "message"
target => "phperror_log"
remove_field => "message"
add_tag => [ "php", "error" ]
}
if [phperror_log][server] =~ /\./ {
mutate {
split => ["[phperror_log][server]", "."]
add_field => [ "pop", "%{[phperror_log][server][1]}" ]
add_field => [ "errorhost", "%{[phperror_log][server][0]}" ]
}
} else {
mutate {
add_field => [ "pop", "not defined" ]
add_field => [ "errorhost", "%{[phperror_log][server]}" ]
}
}
mutate {
remove_field => [ "[phperror_log][server]" ]
}
}
}
【问题讨论】: