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

标签 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插件中捕获拆分结果的长度。

谢谢, 赫里

最佳答案

根据您的代码示例,我假设您已经完成了 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/

相关文章:

Elasticsearch读写一致性

regex - 自定义GROK过滤器-Logstash-> Elasticsearch

elasticsearch - 日志文件不会出现在elasticsearch中

Logstash 过滤器 geo_point 经纬度长吗?

elasticsearch - Elasticsearch 找不到JAVA_HOME

elasticsearch - 泰坦(Titan):从另一台机器连接到Elasticsearch

elasticsearch - 使用 elasticsearch 在同一字段上搜索嵌套字段的多个值

elasticsearch - azure evenhub 插件和 Filebeat azure 模块的区别

elasticsearch - Logstash-JSON解析列表

elasticsearch - 如何在Logstash 5.0中每五分钟运行一次计划?