Logstash - 在mutate中找到拆分结果的长度

时间:2015-09-25 07:54:37

标签: elasticsearch logstash logstash-configuration

我是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

1 个答案:

答案 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