我是 Logstash 的新手。目前我正在尝试解析 CSV 格式的日志。我需要用空格分隔符拆分一个字段,然后我将根据拆分结果添加新字段。
这是我需要创建的过滤器:
filter {
...
mutate {
split => ["user", " "]
if [user.length] == 2 {
add_field => { "sourceUsername" => "%{user[0]}" }
add_field => { "sourceAddress" => "%{user[1]}" }
}
else if [user.length] == 1 {
add_field => { "sourceAddress" => "%{user[0]}" }
}
}
...
}
我在 if
脚本后出错。
请指教,有没有办法在mutate插件中捕获拆分结果的长度。
谢谢, 赫里
最佳答案
根据您的代码示例,我假设您已经完成了 csv 解析,并且您已经有了一个字段 user
,它的值包含 sourceAddress
或一个值包含 sourceUsername sourceAddress
(以空格分隔)。
现在,有一个lot of filters可用于检索更多字段。您不需要使用 mutate 过滤器来拆分字段。在这种情况下,更灵活的方法是 grok filter .
过滤器:
grok {
match => {
"user" => [
"%{WORD:sourceUsername} %{IP:sourceAddress}",
"%{WORD:sourceUsername}"
]
}
}
一个字段“user”=>“192.168.0.99”会导致
"sourceAddress"=> "191.168.0.99"
。
一个字段“user”=>“Herry 192.168.0.99”会导致
"sourceUsername"=> "Herry", "sourceAddress"=> "191.168.0.99"
当然你可以把IP
改成WORD
,如果你的sourceAddress不是IP的话。
关于elasticsearch - Logstash - 在 mutate 中找到拆分结果的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32777382/