Фильтрация входного файла с использованием информации из другого входного файла


(Алексей Петров) #1

Добрый день!

Развернул на ELK мониторинг DNS. Заметил, что накапливается большое количество записей рекламных доменов и доменов метрики яндекс и гугл. Решил отфильтровать все записи с помощью списка таких доменов из текстового файла.
Вопрос: можно ли как то сравнить в logstash два входных файла, один из которых является файлом лога DNS-сервера, а второй файл со списком рекламных доменов, и в новый индекс записать отфильтрованные данные, при этом оставив и старый индекс с полными данными?

Заранее спасибо)


(Igor Motov) #2

A сколько записей в этом списке?


(Алексей Петров) #3

Около 3 тысяч, но если количество принципиально, могу и сократить его до, например, 100 самых назойливых доменов
Я так понимаю, такое сравнение/фильтрацию можно только через руби плагин сделать?


(Igor Motov) #4

Можно воспользоваться reindex api с фильтром terms завернутым в must_not


(Алексей Петров) #5

Спасибо! Использовал terms c must_not, только в aliases. Мне нужно было, чтобы в новом индексе данные динамически обновлялись.

Может кому пригодится. Тут фильтр из двух термов, походу их можно добавлять сколько угодно через запятую.

POST /_aliases
     {
       "actions": [
         {
           "add": {
             "index": "dns-*",
             "alias": "filter",
             "filter": {
               "bool": {
                 "must_not": {
                   "terms": { "Query": ["mc.yandex.ru","yandex.ru"] }
                }
               }
             }
           }
         }
       ]
     }

(Igor Motov) #6

"сколько угодно" - это небольшое преувеличение :slight_smile: