Передаём логи в Graylog с помощью агентов
Подготовим 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 и видим логи с Windows:

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