Перейти к основному содержимому
Версия: 4.5.X

Подключение с помощью файлового коллектора

Подключение нового файлового коллектора

Предварительные условия:

Для установки файлового коллектора на определенный узел, необходимо:

  1. На узле-источнике создать директорию, в которую необходимо переместить deb-пакет

    komrad-file-collector*.deb из дистрибутива KOMRAD

  2. Установить из папки Файловый коллектор командой:

    sudo dpkg -i ./komrad-file-collector*.deb
  3. Открыть файл komrad-file-collector.yaml командой:

    sudo nano /etc/echelon/komrad/komrad-file-collector.yaml
  4. Отредактировать параметр bus-url, задав IP-адрес сервера KOMRAD:

    bus: 
    servers:
    - nats://IP_ KOMRAD»:3490
  5. Сохранить файл и перезагрузить Файловый коллектор командой:

    sudo systemctl restart komrad-file-collector.service
  6. Новый файловый коллектор отобразится в списке коллекторов в веб-интерфейсе

Подключение новых источников событий

Расположение: manage ⇒ Настройки коллекторов ⇒ Файловый коллектор

Действия по подключению:

  1. Кликните по файловому коллектору
  2. На вкладке «Источники» нажмите на кнопку «Добавить». Справа появится форма создания нового источника для файлового коллектора
  3. Задайте параметры подключения на вкладке «Подключение» формы создания нового источника:
    • Название - название узла источника
    • Описание - описание источника
    • Протокол - протокол сбора: SFTP/Локальная машина
    • Актив - IP-адрес узла источника
    • Авторизация
      • Порт
      • Логин и пароль учетной записи, также поддерживается возможность авторизации по ключу (сертификату)

Сбор событий

  1. Добавьте необходимые для передачи в KOMRAD файлы/папки, задав полные пути к ним на вкладке «Сбор событий»
  2. Включите сбор для каждого добавленного файла/папки
  3. Укажите дополнительные параметры сбора
  4. Включите коллектор, если он был выключен или перезагрузите, если он был включен
  5. На узле-источнике убедитесь, что события регистрируются в указанных файлах
  6. Для просмотра событий, поступающих от подключенного источника в KOMRAD, перейдите на дашборд событий в реальном времени: События ⇒ События в реальном времени

Дополнительно:

  1. Для обеспечения возможности подключения с использованием ключа (сертификата) необходимо сохранить его копию в директории $HOME/.ssh
  2. Необходимо удостоверится, что у файла, который планируется собирать файловым коллектором, настроено право на чтение пользователем, с помощью которого будет осуществляться сбор

Дополнительные параметры сбора

У файлового коллектора гибкие возможности настройки, ниже указаны доступные настройки.

"ID": "",

"Reader": {

"Backoff": {

"Init": "PT2S", //Начальный интервал повторного опроса файла, каждый раз увеличивается в 2 раза, если в файл остался неизменным (до достижения максимального интервала)

"Max": "PT10S" // Максимальный интервал повторного опроса файла

//При значении "Init": "PT10S" и "Max": "PT20S" в логах коллектора Start next scan идет каждые 10 секунд

*},

"BufferSize": 16384, // Размер буфера, используемый для чтения файла (в байтах)

"Encoding": "", // При значении "Encoding": "utf-8" русские буквы распознаются, буквы английского алфавита приходят в виде значков. Примеры: plain, utf-8, utf-16be-bom, utf-16be, utf-16le, big5, gb18030, gbk, hz-gb-2312, euc-kr, euc-jp, iso-2022-jp, shift-jis

"ExcludeLines": null, // Экспериментальная функция,тесты не подтвердили работоспособность. Список регулярных выражений, по которым игнорируются строки (по умолчанию обрабатываются все строки) // Регулярные выражения должны быть в виде в виде массива "[]". Проверка: при значении "ExcludeLines": ["123"] отправляем событие 123 и 456. Результат: оба события пришли, хотя событие 123 должно было отброситься. В логах сообщение Drop line as it does not match any of the include patterns. В документации к filebeat описано так: сначала парсер Multiline собирает все подходящие события в одно, а затем уже происходит отбор по значению параметра ExcludeLines или IncludeLines. Кроме того, если прописать регулярные выражения и для ExcludeLines, и для IncludeLines, то IncludeLines выполняется первым. // https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-stdin.html

"IncludeLines": null, // Экспериментальная функция,тесты не подтвердили работоспособность. Список регулярных выражений, по которым отбираются строки (по умолчанию обрабатываются все строки) // Регулярные выражения должны быть в виде в виде массива. Проверка: при значении "IncludeLines": ["123"] отправляем событие 123 и 456. Результат: событие не пришло, хотя должно было прийти. В логах сообщение Drop line as it does not match any of the include patterns

"LineTerminator": "auto", // Экспериментальная функция,тесты не подтвердили работоспособность. Разделитель строк. В документации к failbeat предлагаются следующие значения для поля "LineTerminator": auto, line_feed, vertical_tab, form_feed, carriage_return, carriage_return_line_feed, next_line, line_separator, paragraph_separator, null_terminator. Проверено при значении vertical_tab и null_terminator - источник можно сохранить, ошибок нет, но события из отслеживаемого файла перестают приходить до тех пор, пока не поставить обратно значение auto

"MaxBytes": 10485760, // Максимальный размер одного события (в байтах). Проверено при значении 8 - приходят события до 8 символов

"Tail": false, // Если для этого параметра установлено значение true, коллектор начинает читать новые файлы с конца каждого файла, а не с начала. Этот параметр применяется к новым файлам, которые коллектор еще не обработал. Если вы ранее запускали Filebeat и состояние файла уже сохранилось, оно tail_filesне будет применяться

"Parsers": {

"MaxBytes": 10485760,

"Parsers": [ {

"Kind": "multiline",

// Тип парсера =multiline, =ndjson, =container

// Документация для multiline: https://www.elastic.co/guide/en/beats/filebeat/current/multiline-examples.html

"Multiline":

{

// Парсер для агрегации многострочных событий

"Type": "count_mode", // Тип работы: ="pattern_mode"-по шаблону, ="count_mode"-по количеству строк, ="while_pattern_mode"-по шаблону. "Сount_mode" (работает) создает события из определенного количества строк, заданного в параметре LinesCount. "Pattern_mode" (работает) поддерживает регулярные выражения (Pattern) и в зависимости от настроек Negate и Match, строки соответствующие указанному регулярному выражению, считаются продолжением предыдущей строки, либо началом нового многострочного события. "While_pattern_mode" (работает) поддерживает регулярные выражения (Pattern), но не применяет опцию Match

"Negate": false, // Опция инвертирования pattern и match

"Match": "after", // Параметр объединения строк в событие ="after"-по последнему совпадению, ="before"-до следующего совпадения

"MaxLines": null, // Лимит по числу строк в одном событии Проверено при "Type": "count_mode", "LinesCount": 20, MaxLines": 5. Только 5 строк объединяются в одно событие, а не 20

"Pattern": "", // Шаблон регулярного выражения для агрегации событий. Примеры: "[[:space:]]" - строки с пробелом в начале сроки, "[" - строки с [ в начале строки

"Timeout": null, //Экспериментальная функция,тесты не подтвердили работоспособность. Таймаут ожидания строк события. При его достижении отправляется событие, не дожидаясь шаблона нового события При значении "LinesCount": 10 и "Timeout": "PT50S" отправляю 5 строк. Событие формируется раньше завершения таймаута из 5 строк (хотя событие должно сформироваться или по завершении таймаута из имеющегося количества строк или после поступления 10 строк)

"FlushPattern": "", //Шаблон, по которому строка будет сброшена из памяти, завершая многострочное событие // работает. При "Type": pattern_mode, "Negate": true, "Match": "after", "Pattern": "Start new event", "FlushPattern": "End event" несколько строк объединяются в одно событие только в режиме "pattern_mode"

"LinesCount": 1, // Кол-во строк для объединения в одно событие При "Type": "count_mode", "LinesCount": 5, 5 строк объединяются в одно событие

"SkipNewLine": false // Опция объединения строк без переноса строки (разделителя "\n") Если в отслеживаемый файл отправить строки adm и in, то получится событие "admin", а не "adm in"

,

"NDJSON":

{ "MessageKey": "max-size", "DocumentID": "", "KeysUnderRoot": false, "OverwriteKeys": false, "AddErrorKey": false, "IgnoreDecodingError": false, "ExpandKeys": false, "Field": "", "Target": "" }

,

"Container":
{ // Парсер логов контейнеров. Извлекает сообщения и timestamps "Stream": "all", // Потоки чтения: ="all", ="stdout", ="stderr" "Format": "cri" // Формат логов: ="auto", ="docker", ="cri" }

}

],

"Suffix": ""

}

},

"Paths": [], Экспериментальная функция,тесты не подтвердили работоспособность. чтобы путь из Доп. параметров работал, необходимо указать любой валидный путь к файлу во вкладке Сбор событий (путь1), затем указать путь во вкладке Доп. параметры (путь 2), после этого сохранить источник. Тогда будут работать путь1 и путь2. После сохранения источника путь из вкладки Сбор событий можно удалить, а путь из вкладки Доп. параметры оставить. Тогда будет работать только путь2. Если же при создании источника прописать путь только во вкладке Доп. параметры, то события приходить не будут. Во вкладке Доп. параметры можно продублировать путь другого источника, тогда события будут дублироваться. В качестве пути можно указать любые символы, при этом коллектор работает исправно. При редактировании параметра Paths уже созданного источника не активируется кнопка Сохранить. Нужно поменять какой-то параметр из другой вкладки, а после этого уже сохранить изменения во вкладке Доп. параметры

"IgnoreOldPaths": null,

"Close": {

"OnStateChange":

{ "CheckInterval": "PT5S",

"Inactive": "PT10S", Таймаут закрытия дескриптора файла (с момента последнего обновления файла)

"Removed": true, // Остановить обработчик при закрытии файла

"Renamed": false // Остановить обработчик при переименовании файла }

,

"Reader":

{ "AfterInterval": "P0D",

// Таймаут закрытия дескриптора файла (со старта работы обработчика) "OnEOF": false // Остановить обработчик при достижении конца файла (возможна потеря данных) }

},

"FileWatcher": {

"Interval": "P0D", // Интервал поиска новых файлов в отслеживаемой директории

"ResendOnModTime": null, // Повторно обрабатывать файл, если его размер остался прежним, а время модификации изменилось

"Scanner":

{ "ExcludedFiles": null, // Список регулярных выражений, по которым игнорируются файлы (по умолчанию обрабатываются все файлы) Необходимо заполнять регулярными выражениями в виде массива. Если параметр "ExcludedFiles" равен ["22.txt$"], то коллектор не отслеживает файлы с названиями 22.txt 122.txt, но отслеживает файлы с названиями 2211.txt 22.json

"IncludedFiles": null, // Список регулярных выражений, по которым отбираются файлы (по умолчанию обрабатываются все файлы) Необходимо заполнять регулярными выражениями в виде массива. Если параметр "IncludedFiles" равен ["22.txt$"], то коллектор отслеживает файлы с названиями 22.txt 122.txt, но не отслеживает файлы с названиями 2211.txt 22.json

"Symlinks": null, // Сбор символических ссылок в дополнение к обычным файлам. Прописан путь /etc/file-collector/symlink

"RecursiveGlob": null // Включить рекурсивное отслеживание файлов в указанной директории При "RecursiveGlob": true приходят события об изменении файлов во вложенных директориях, при значении false - не приходят. Нужно прописывать уровень вложенности в пути отслеживания /etc/file-collector/dir1/*** }

},

"FileIdentity":

{ // Эти параметры отвечают за методы обнаружения файлов "Kind": "path", // Способ обнаружения файлов: ="native"-по индексным дескрипторам, ="path"-по путям, ="inode_marker" "InodeMarkerIdentifier": null // Маркер для способа обнаружения ="inode_marker" }

,

"CleanTimeout": "P0D", // Очистка из реестра при истечении таймаута

"CleanInactive": "P0D", // Очистка из реестра при истечении таймаута (с момента последнего обновления файла)

"CleanRemoved": null, // Очистка из реестра при удалении файла

"HarvesterLimit": 0,

"IgnoreOlder": "P0D", // Игнорировать файлы, измененные до выставленного значения (Отключено="P0D")

"IgnoreInactive": null, // Игнорировать файлы, измененные до: ="since_first_start"-первого старта источника, ="since_last_start"-последнего старта источника (не уверен, что эта опция будет корректно работать)

"Rotation":

{ // Дополнительные параметры ротации файлов. По умолчанию работает ротация с перемещением старого файла на и заменой на новый пустой.

"Name": "",

"Strategy": "", // ="copytruncate"-копируется содержимое активного файла, затем файл очищается. Для этой стратегии необходим параметр suffixRegex

"SuffixRegex": "", // Суффикс для отличия активных от rotate файлов (может быть числом или датой)

"DateFormat": "" // Формат даты при использовании даты в suffixRegex }

,

"MetaFields":

{ "Source": "" }

,

"AlertFileChanges": true, // Отслеживание и создание событий при изменении файлов (create/move/delete файла). При значении true приходят события об изменении, создании, перемещении файлов в отслеживаемой папке, при значении false - нет

"ConnectType": "",

"SSHParams": null

Удаление

Удалить файловый коллектор можно с помощью команды:

sudo dpkg -P komrad-file-collector