首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Logstash条件不匹配

问Logstash条件不匹配
EN

Stack Overflow用户
提问于 2016-08-19 16:08:19
回答 1查看 1K关注 0票数 0

我正在尝试匹配条件筛选器中的子字符串,但似乎不起作用。

我有一个这样的日志:

代码语言:javascript
复制
<30>ddns[21535]: Dynamic DNS update for xxx (Duck DNS) successful

我正在尝试匹配日志的ddns部分,因为日志也可以由不同的服务发送。

目前我的过滤器看起来是这样的:过滤器{

代码语言:javascript
复制
if [program] =~ "ddns" {
    grok {
        match => { "message" => "<%{PROG:syslog_pri}>%{DATA:program}[%{INT:pid}]: %{GREEDYDATA:syslog_message}" }
        add_field => [ "received_at", "%{@timestamp}" ]
    }
}
    syslog_pri { }

    date {
        match => [ "syslog_timestamp", "yyyy:MM:dd-HH:mm:ss" ]
    }

    mutate {
        replace => [ "@source_host", "sflne01.sarandasnet.local" ]
        replace => [ "@message", "%{syslog_message}" ]
        remove_field  => [ "syslog_message", "syslog_timestamp" ]
    }
}

我也尝试过使用if [program] =~ /^ddns$/,但没有成功。

已更新配置:

代码语言:javascript
复制
filter {
################
# START IPFIRE #
################
if [host] =~ /172\.16\.0\.1/ {
    if [program] =~ /(?:k|kernel)/ {
        grok {
            match => { "message" => "<%{PROG:syslog_pri}>%{DATA:program}: %{GREEDYDATA:syslog_message}" }
            add_field => [ "received_at", "%{@timestamp}" ]
        }
    }

    if [prog] =~ /^ddns$/ {
        grok {
            match => { "message" => "<%{PROG:syslog_pri}>%{DATA:program}\[%{INT:pid}\]: %{GREEDYDATA:syslog_message}" }
            add_field => [ "received_at", "%{@timestamp}" ]
        }
    }

    syslog_pri { }

    date {
        match => [ "syslog_timestamp", "yyyy:MM:dd-HH:mm:ss" ]
    }

    mutate {
        replace => [ "@source_host", "sflne01.sarandasnet.local" ]
        replace => [ "@message", "%{syslog_message}" ]
        remove_field  => [ "syslog_message", "syslog_timestamp" ]
    }

    kv {
        source => "@message"
    }

    geoip {
        source => "SRC"
        target => "geoip"
        database => "/etc/logstash/GeoLiteCity.dat"
        add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
        add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
    }

    mutate {
        convert => [ "[geoip][coordinates]", "float"]
    }
}
################
#  END IPFIRE  #
################
}
EN

回答 1

Stack Overflow用户

发布于 2016-08-19 18:01:24

我用下面的代码做了有条件的工作:

代码语言:javascript
复制
if [message] =~ /ddns/

我认为您必须使用/而不是",这样ddns才能用作正则表达式。

/^ddns$/有一个错误:^锚定在字符串的开头,$锚定在字符串的末尾。所以这个正则表达式唯一匹配的是ddns。如果希望正则表达式与字符串中任意位置的ddns匹配,则必须将两者都删除

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39034101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档