我对Logstash相对较新,但到目前为止已经取得了成功。我正在解析日志并在Kibana中查看输出。
我想要做的只是输出我感兴趣的数据。这包括source = linux
和number = 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 }
}
有更好的方法吗?谢谢!
答案 0 :(得分:1)
感觉像你的意思:
if [source] != "linux" or [number] not in ["78","80"] {
drop {}
}