regex 从MikroTik日志中获取主题的正则表达式

643ylb08  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(124)

我的日志看起来像这样:

system,info,account user admin logged out from 192.168.1.9 via local
system,info log rule added by admin

每一行都以逗号分隔的主题列表开始,在第一个空格之后列表结束。列表中可以有一个、两个、三个或更多主题。我需要得到的主题作为一组值,就像它是[ "system", "info", "account" ]的第一行和[ "system", "info" ]的第二。
我尝试先使用^\S+提取列表,然后在第一个正则表达式结果上使用[^,]+。它工作正常,但也许有一种方法,允许这样做,与一个正则表达式?
我需要一行正则表达式,因为我将在Grok pattern中使用该正则表达式来添加这些主题作为标记。Grok使用Oniguruma正则表达式引擎。

uinbv5nw

uinbv5nw1#

解决方案是在grok从消息中提取主题部分后使用mutate { split ... merge ... }

filter {
    grok {
        patterns_dir => [ "/etc/logstash/patterns" ]
        match => { "message" => "(?<mttopics>^\S+) %{GREEDYDATA:message}" }
        overwrite => [ "message" ]
    }
    mutate {
        split => { "mttopics" => "," }
        merge => { "tags" => "mttopics" }
        remove_field => [ "mttopics" ]
    }
}

相关问题