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

Для передачи логов на сервер 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.

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

  1. Огонь! Рассмотреть бы ещё кластеризацию всего хозяйства.. И зеркалирование монго ДБ

    Ответить

Оставьте комментарий