Фильтр Logstash по определенным значениям

Я относительно новичок в 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 }
}

Есть лучший способ сделать это? Спасибо!


person ad2387    schedule 17.11.2015    source источник


Ответы (1)


Похоже, вы имели в виду:

if [source] != "linux" or [number] not in ["78","80"] {
    drop {}
}
person Alain Collins    schedule 17.11.2015