特定值的 Logstash 过滤器

Logstash Filter on Specific Values

我对 Logstash 比较陌生,但到目前为止已经很成功了。我正在解析日志并在 Kibana 中查看输出。

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

我正在尝试使用 drop{} 函数通过尝试删除任何不符合这些条件的内容来执行此操作。如果source不等于linux,而且number不是78或者80,那就drop吧。逻辑告诉我这只会在输出中发送我想要的内容,但我没有任何运气。它对一个或另一个非常有效(仅过滤源或仅过滤数字)但是当我尝试同时执行这两种操作时,它只需要第一个条件。我尝试了几种不同的方法:嵌套 if 语句、单独的 if 语句、使用 !=、not in 等。

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

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 }
}

有更好的方法吗?谢谢!

感觉你的意思是:

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