Передаём логи в Graylog с помощью агентов

Для передачи логов на сервер Graylog можно использовать агентов - это программы, которые считывают логи с хоста и передают их по сети на сервер. В этой статье я разберу 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 и видим логи с Windows:

Сравнение с Rsyslog

На Linux для передачи данных вы можете использовать Rsyslog или FileBeat.

  • Rsyslog — настраивается легче, передаёт меньше служебной информации (меньше нагружает сеть и сервер).
  • FileBeat — настраивается сложнее (немного), передаёт больше информации (в каких-то случаях она может быть нужна, а в каких-то нет), нагружает сеть и сервер сильнее.

Если у вас нет особой аналитики, и вы просто централизованно собираете логи, то проще использовать Rsyslog. Кстати есть способы передачи Windows логов также через Rsyslog.


Если понравилась статья, подпишись на мой канал в  VK  или  Telegram .