Я относительно новичок в 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 }
}
Есть лучший способ сделать это? Спасибо!