特定值的 Logstash 过滤器
Logstash Filter on Specific Values
我对 Logstash 比较陌生,但到目前为止已经很成功了。我正在解析日志并在 Kibana 中查看输出。
我想做的是仅输出我感兴趣的数据。这包括 source = linux
和 number = 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 {}
}
我对 Logstash 比较陌生,但到目前为止已经很成功了。我正在解析日志并在 Kibana 中查看输出。
我想做的是仅输出我感兴趣的数据。这包括 source = linux
和 number = 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 {}
}