Logstash过滤特定值

时间:2015-11-17 21:27:27

标签: elasticsearch logstash kibana elastic-stack

我对Logstash相对较新,但到目前为止已经取得了成功。我正在解析日志并在Kibana中查看输出。

我想要做的只是输出我感兴趣的数据。这包括source = linuxnumber = 78 or 80的数据。

我正在尝试使用drop{}函数来尝试删除任何不符合这些条件的内容。如果源不等于linux且数字不是78或80,则删除它。逻辑告诉我这只会在输出中发送我想要的东西,但我没有运气。它适用于一个或另一个(只是过滤源或只是过滤数字)但当我尝试两者时,它只需要第一个条件。我尝试了几种不同的方法:嵌套if语句,单独if语句,使用!=,不在等等。

下面是我的代码(注意过滤器中的条件):

input {
    file {
        path => "/home/user/logs/os_log.csv"
        start_position => beginning
        sincedb_path => "/dev/null"
    }
}

filter {
    grok {
        match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}\,\"?%{NUMBER:number}\s*<%{NUMBER:carrotnumber}>%{SYSLOGTIMESTAMP:syslogtimestamp}\s*%{WORD:object}\s*%{USERNAME:source}\s*%{GREEDYDATA:event}" }
    }

    if [source] != "linux" and [number] not in ["78","80"] {
        drop {}
    }
}

output {
    elasticsearch { host => localhost }
}

有更好的方法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

感觉像你的意思:

if [source] != "linux" or [number] not in ["78","80"] {
    drop {}
}