我是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插件中捕获拆分结果的长度。
谢谢, Heri
答案 0 :(得分:2)
根据您的代码示例,我假设您完成了csv解析,并且您已经有一个字段user
,其中包含一个包含sourceAddress
的值或一个包含{{1}的值(由空格分隔)。
现在,有一个lot of filters可用于检索更多字段。您无需使用 mutate 过滤器来拆分字段。在这种情况下,更灵活的方法是grok filter。
过滤强>
sourceUsername sourceAddress
字段“user”=> “192.168.0.99”将导致
grok {
match => {
"user" => [
"%{WORD:sourceUsername} %{IP:sourceAddress}",
"%{WORD:sourceUsername}"
]
}
}
。
字段“user”=> “Herry 192.168.0.99”将导致
"sourceAddress" => "191.168.0.99"
当然,如果您的sourceAddress不是IP,则可以将"sourceUsername" => "Herry", "sourceAddress" => "191.168.0.99"
更改为IP
。