Перейти к содержанию

Фильтрация событий

Платформа поддерживает фильтрацию входящих событий на двух этапах:

  1. Фильтрация на этапе сбора лог-коллектором;

  2. Фильтрация на этапе принятия событий модулем обработки событий.

Фильтрация на этапе сбора лог-коллектором

Фильтрацию на этапе сбора лог-коллектором можно разбить на два типа:

Фильтрация структурированных данных

Применима для таких типов источников, как:

  • WMI
  • Event log
  • ODBC
  • ETW

Фильтрация в компонентах сбора со структурированными данными работает как blacklist и настраивается при описании источника, в секции filters.

Пример фильтрации, исключающий сбор событий с уровнем Information:

 filters:
   created: ''
   event_id: ''
   qualifiers: ''
   record_id: ''
   process_id: ''
   thread_id: ''
   version: ''
   computer_name: ''
   msg: ''
   level_text: 'Information'
   task_text: ''
   opcode_text: ''
   channel_text: ''
   provider_text: ''

Фильтрация неструктурированных данных

Фильтры можно указать для каждого коллектора с неструктурированными данными.

Фильтры содержат белый список (whitelist) и черный список (blacklist) с массивом регулярных выражений.

Все регулярные выражения проверяются перед запуском приложения. Сначала проверяется белый список, а затем черный.

Фильтрация по регулярным выражениям может быть включена в любом коллекторе с неструктурированными данными.

Включается путем добавления секции filters. В данной секции указываются два массива — whitelist, blacklist.

Все события сначала проходят фильтры указанные в whitelist, т.к. его приоритет выше. Затем события проверяются фильтрами, указанными в blacklist.

Whitelist — события, которые соответствуют регулярному выражению, попадают в очередь на отправку. Blacklist — события, которые соответствуют регулярному выражению, блокируются и не попадают в очередь на отправку.

Пример фильтрации для неструктурированных данных:

  filters:
      whitelist:
        - "^localhost.*$"
      blacklist:
        - "^.*[0-9]$"

Фильтрация на этапе принятия событий модулем обработки событий

Фильтрация на данном этапе осуществляется через файл /etc/termite/processors.py

Блок предварительной фильтрации - это простая функция Python, которая принимает сырое событие и определенное условие, в качестве входных данных, и возвращает логическое значение.

Значение False приводит к пропуску сырого события.

Пример использования, по которому, если в сыром событии присутствует слово "irrelevant" - событие пропускатеся:

  @prefilter('drop-irrelevant')
  def drop_irrelevant(raw):
      return 'irrelevant' not in raw

Настройка фильтрации поступающих событий

При получении сообщений от внешних источников можно настроить фильтрацию поступающих событий.

Для настройки фильтрации необходимо выполнить следующие действия:

  1. Подключиться по SSH к узлу обработки событий (Worker) платформы.

  2. Открыть на редактирование файл:

nano /opt/pangeoradar/termite2/venv/lib/python3.7/site-packages/termite_spu/prefilters/prefilters.py

  1. Добавить в конец файла следующую запись:

@prefilter('<имя>')

  `def drop_demo_user(raw: str):`

return '"rrname":"<ключ>"' not in raw

где:

<имя> - уникальное имя фильтра.

<ключ> - строка из состава сырых данных события, по наличию которой будет происходить фильтрация поступающих событий.

  1. Сохранить изменения в файле.

  2. Открыть файл pipelines.yaml:

nano /opt/pangeoradar/configs/termite/pipelines.yaml

  1. Найти в файле раздел настроек источника, чьи поступающие сообщения необходимо фильтровать, и добавить в этот раздел следующую запись:

prefilters: ['<имя>'],

где: <имя> - имя фильтра, заданное на шаге 3.

  1. Сохранить изменения в файле.

Для проверки работы фильтрации поступающих сообщений - перейти в веб-интерфейс платформы в раздел "Просмотр событий" и убедиться, что указанные для фильтрации события не поступают в платформу.