elasticsearch Logstash-在mutate中查找分割结果的长度,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration" /> elasticsearch Logstash-在mutate中查找分割结果的长度,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration" />

elasticsearch Logstash-在mutate中查找分割结果的长度

elasticsearch Logstash-在mutate中查找分割结果的长度,elasticsearch,logstash,logstash-configuration,elasticsearch,Logstash,Logstash Configuration,我是Logstash的新手。目前我正在尝试以CSV格式解析日志。我需要用空格分隔符拆分字段,然后根据拆分结果添加新字段 以下是我需要创建的过滤器: filter { ... mutate { split => ["user", " "] if [user.length] == 2 { add_field => { "sourceUsername" => "%{user[0]}" } add_field => { "sourc

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

根据您的代码示例,我假设您已经完成了csv解析,并且您已经有一个字段
user
,该字段的值包含
sourceAddress
或包含
sourceUsername sourceAddress
的值(由空格分隔)

现在,有一个可用于检索更多字段的。您不需要使用mutate过滤器来分割字段。在这种情况下,一种更灵活的方法是

过滤器:

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,您可以将
IP
更改为
WORD