Для передачи логов на сервер Graylog можно использовать специальных агентов. Агенты это программы, которые умеют считывать системные логи или логи приложений и передавать их по сети на специальный сервер, например Graylog или ELK. В этой статье я разберу 2 агента: для Linux — FileBeat, и для Windows — WinlogBeat. Сразу предупрежу, я сам только знакомлюсь с Graylog и с ELK стеком, поэтому всё что продлевается в статье должно работать, но может не является best practice.
Подготовим Graylog к сбору логов
Я уже писал несколько статей по серверу Graylog, если ещё не читали сделайте это обязательно:
Вам необходимо запустить Input с типом Beats.

Сделайте этот Input глобальным, и по умолчанию он запустится на 5044 порту TCP. Так вы заставите Graylog принимать данные с агентов, которые называются Beats, например FileBeat или WinlogBeat.
Стримы Graylog
Так как теперь в Graylog у меня два Input: первый для Syslog, а второй для агентов (Beats), то я могу разделить эти Inputs на два потока (Streams). Для этого переходим в Streams и создаём два стрима:

Дальше вы можете поправить правила попадания логов в эти стримы:

Создаём правило, в котором указываем, что если Input = Beats, то попадай в этот стрим (Beats):

Подобное делаем для стрима Rsyslog. Если Input = Syslog UDP, то попадаем в этот стрим (Rsyslog):

Итак, мы подготовили Graylog к сбору логов от агентов, которые смогут посылать в него логи, как в Logstash.
Передача логов с сервера Linux
Для LInux я буду использовать FileBeat. Это легковесный агент для сбора и пересылки логов. Он разрабатывается компанией Elastic и является частью стека ELK. Может пересылать логи в такие системы как:
- Elasticsearch;
- Logstash;
- Kafka.
FileBeat гарантирует доставку логов на сервер и работает следующим образом:
- Вы должны указать источники (Input), например файлы, из которых нужно забирать логи.
- Для каждого файла создается отдельный процесс, который читает данные.
- Есть возможность применять фильтры, парсить данные и добавлять метаданные (например, имя хоста).
- Также, вы должны указать сервер на который нужно передать собранные логи (Output).
Перед установкой FileBeat. Скачаем ключ репозитория: https://artifacts.elastic.co/GPG-KEY-elasticsearch (возможно придётся это сделать через прокси, так как пока доступ из России заблокирован). Затем установим этот ключ на сервере:
# apt-key add GPG-KEY-elasticsearch
Добавим зеркало репозитория от яндекса:
# nano /etc/apt/sources.list.d/elastic-8.list deb https://mirror.yandex.ru/mirrors/elastic/8/ stable main
Обновим кэш пакетов и установим filebeat:
# apt update # apt install filebeat
Отредактируем конфиг (не перезатирайте его полностью, просто поправьте поля, которые я указал):
# nano /etc/filebeat/filebeat.yml filebeat.inputs: - type: filestream id: my-filestream-id enabled: true paths: - /var/log/*.log #output.elasticsearch: #hosts: ["localhost:9200"] #preset: balanced #protocol: "https" #api_key: "id:api_key" #username: "elastic" #password: "changeme" output.logstash: hosts: ["server-graylog:5044"] processors: #- add_host_metadata: # when.not.contains.tags: forwarded #- add_cloud_metadata: ~ #- add_docker_metadata: ~ #- add_kubernetes_metadata: ~ logging.level: error
- filebeat.inputs — я оставил по умолчанию, просто включив его (параметр — enabled).
- /var/log/*.log — здесь передаются логи из каталога /var/log, но вы можете указать любые другие файлы логов.
- output.elasticsearch — закомментируем, ведь мы будем отправлять логи в Graylog а не в Elasticsearch. Кстати в Elasticsearch логи передают тоже обычно через logstash.
- output.logstash — раскомментируем и укажем адрес Graylog сервера.
- hosts: [«server-graylog:5044»] — помимо ip-адреса сервера вы можете указат его имя, главное чтобы он был доступен по этому имени.
- Дополнительно, я закомментировал фильтры из блока processors, чтобы не получать ненужной для меня информации. Этот блок используется для обработки и добавления метаданных к отправляемым логам.
- add_host_metadata — добавляет метаданные о хосте (его имя, ip и mac адреса);
- add_cloud_metadata — добавляет метаданные об облачной среде, если Filebeat работает в облаке (AWS, Google Cloud, Azure);
- add_docker_metadata — добавляет метаданные, связанные с Docker, если Filebeat работает в Docker;
- add_kubernetes_metadata — добавляет метаданные о Kubernetes, если Filebeat работает в таком окружении.
- logging.level — это относится к логам самого filebeat, по умолчанию info, но я предпочитаю видеть в логах только ошибки.
После настройки, перезапустим filebeat:
# systemctl restart filebeat
В Graylog перейдя в нужный Stream вы увидите принятые логи:

Передача логов с сервера Windows
Для Windows я будем использовать WinlogBeat. Это легковесный агент для сбора событий из системных журналов Windows (Event Logs) и отправки их в Logstash или Elasticsearch.
Скачать WinlogBeat может от сюда https://www.elastic.co/downloads/beats/winlogbeat. Придётся также использовать прокси, жаль что Яндекс не поместили это приложение в своё зеркало репозитория.
После установки у вас в системе появится служба winlogbeat:

А конфиг будет лежать в каталоге: C:\Program Files\Elastic\Beats\8.15.4\winlogbeat.
Вот пример конфига:
winlogbeat.event_logs: - name: Application ignore_older: 72h - name: Security ignore_older: 72h - name: System ignore_older: 72h - name: Setup ignore_older: 72h output.logstash: enabled: true hosts: ["server-graylog:5044"] logging.level: error logging.to_files: true logging.files: path: C:/ProgramData/Elastic/Beats/winlogbeat name: winlogbeat.log keepfiles: 5 rotateeverybytes: 10485760 # 10 MB
- winlogbeat.event_logs — здесь я указываю, какие журналы следует пересылать на сервер Graylog.
- Чтобы старые логи не пересылались я игнорирую логи старше 72 часов.
- output.logstash — передаю данные в Graylog, указав его имя.
- logging.level — уровень журналирования самого Winlogbeat.
- logging.to_files — лог самого Winlogbeat следует писать в файл.
- logging.files — настраиваю сам файл и указываю что хранить нужно 5 файлов, по 10 MB.
После правки конфига нужно перезапустить службу.
Потом возвращаемся в Graylog, открываем нужный Stream и видим логи пришедшие и с Linux и теперь ещё с Windows:

Сравнение с Rsyslog
На Linux для передачи данных вы можете использовать Rsyslog или FileBeat.
- Rsyslog — настраивается легче, передаёт меньше служебной информации (меньше нагружает сеть и сервер).
- FileBeat — настраивается сложнее (немного), передаёт больше информации (в каких-то случаях она может быть нужна, а в каких-то нет), нагружает сеть и сервер сильнее.
В общем, если у вас нет особой аналитики, и вы просто централизованно собираете логи, то проще использовать Rsyslog. Кстати есть способы передачи Windows логов также через Rsyslog.
Если понравилась статья, подпишись на мой канал в VK или Telegram.
Огонь! Рассмотреть бы ещё кластеризацию всего хозяйства.. И зеркалирование монго ДБ