Home » Linux » CentOS » Настройка syslog-ng для централизованного сбора логов

Настройка syslog-ng для централизованного сбора логов

Мне понадобилось организовать сервер для сбора логов с удаленных устройств. Это могут быть серверы, сетевое оборудование, либо что-то еще, что поддерживает логирование в формате syslog. Я решил использовать не стандартный для большинства дистрибутивов rsyslog, а установить syslog-ng, потому что мне он показался более удобным и простым в настройке.

Введение

Информации на тему сбора логов с удаленных серверов и интернете достаточно много. Ничего сложного тут нет, я и сам уже описывал подобную настройку в статье про сбор логов с mikrotik. Но решение получилось кривоватое, в комментариях написаны замечания. Я и сам знал о них, но простого и быстрого решения я не смог найти, на тот момент меня устраивал и такой вариант. Сейчас же решил все сделать аккуратно и красиво, чтобы было удобно пользоваться. В процессе поиска информации в интернете решил попробовать syslog-ng. С ним у меня не возникло никаких затруднений, сразу получилось то, что требовалось, поэтому я остановил свой выбор на нем.

Настраивать сервер сбора логов будем на системе CentOS 7. Если у вас еще не подготовлен сервер, то читайте мою информацию по установке и базовой настройке centos. Для небольшого количества устройств, нагрузка на сервер будет незначительная, поэтому имеет смысл размещать сервер на виртуальной машине. Если у вас нет готового гипервизора, можете посмотреть мою информацию на тему настройки linux гипервизора proxmox или бесплатного решения microsoft — Windows Hyper-V Server 2016.

Установка и настройка syslog-ng

С установкой нет ничего сложного. Установить syslog-ng можно одной командой:

# yum install -y syslog-ng

Сразу переходим к настройке. Файл конфигурации располагается по адресу /etc/syslog-ng/syslog-ng.conf. Чтобы сервер начал принимать логи с удаленного устройства, его необходимо прописать в конфиг. Делается это просто. В самый конец конфигурационного файла добавляем информацию о новом устройстве:

destination d_xs-zabbix { file("/var/log/!remote/xs-zabbix.log"); };
filter f_xs-zabbix { netmask("10.1.3.29/255.255.255.255"); };
log { source(net); filter(f_xs-zabbix); destination(d_xs-zabbix); };
d_xs-zabbix Название назначения для записи лога по адресу /var/log/!remote/xs-zabbix.log
f_xs-zabbix Название фильтра по адресу сервера источника.
10.1.3.29 Адрес сервера источника логов

Соответственно для второго сервера нужно добавить еще 3 строки, например так:

destination d_xs-web { file("/var/log/!remote/xs-web.log"); };
filter f_xs-web { netmask("10.1.3.38/255.255.255.255"); };
log { source(net); filter(f_xs-web); destination(d_xs-web); };

И так далее. Добавляете столько серверов, сколько нужно. Не забудьте создать папку для логов. В моем примере это папка /var/log/!remote, сами файлы создавать не надо, служба автоматически их создаст, когда придет информация с удаленных серверов.

Запускаем syslog-ng и добавляем в автозагрузку:

# systemctl start syslog-ng
# systemctl enable syslog-ng

Проверим, запустилась ли служба:

# netstat -tulnp | grep syslog
udp 0 0 0.0.0.0:514 0.0.0.0:* 25960/syslog-ng

Все в порядке, слушает 514 udp порт. Не забудьте открыть этот порт в iptables, если у вас включен фаерволл. Сервер готов к приему логов.

Отправка логов syslog на удаленный сервер

Теперь идем на добавленные в syslog-ng сервера и настраиваем там отправку логов на наш сервер. Сделать это очень просто. Открываем файл конфигурации rsyslog. В CentOS он живет по адресу /etc/rsyslog.conf и добавляем туда строку:

*.* @10.1.3.22

10.1.3.22 — ip адрес syslog-ng сервера. Перезапустите rsyslog:

# service rsyslog restart

и проверяйте логи на сервере syslog-ng в указанной папке. Правило *.* отправит все логи в указанное направление. Это не всегда нужно, можно отредактировать правила. Для этого надо ознакомиться с документацией по syslog. Там нет ничего сложного, мне не хочется на этом сейчас подробно останавливаться. В интернете есть примеры. Приведу пару своих.

*.*;local5.none @10.1.3.22

В данном случае у меня по local5.notice идет лог самбы по доступу к сетевой шаре. Мне не нужно собирать эту информацию и я ее отключил. Вот еще пример:

*.info @10.1.3.22

С этого сервера сыпалось много лишней информации уровня debug. Я ограничил отправляемые сообщения уровнем info. И так далее.

Ротация логов syslog-ng

В завершение приведу пример своего правила ротации логов. Рекомендую ротацию настроить сразу, не оставлять на потом. Создаем файл /etc/logrotate.d/syslog-ng

# mcedit /etc/logrotate.d/syslog-ng
/var/log/!remote/*.log {
    daily
    rotate 180
    olddir /var/log/!remote/old
    missingok
    compress
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

По этому правилу ротация логов происходит раз в день. Старые логи перемещаются в папку /var/log/!remote/old и сжимаются. Хранятся логи за последние 180 дней.

Заключение

Я привел частный случай настройки хранения логов с удаленных устройств. Решение в лоб. В простых случаях этого достаточно. Лично мне удобно смотреть информацию в текстовых файлах. Это требуется редко, сделано на всякий случай для расследования инцидентов, если таковые возникают. Эту же задачу, к примеру, можно решить с помощью заббикс. Я уже показывал, как мониторить с помощью zabbix лог файлы. Приведенное решение легко переделать в хранение логов.

Для более удобного сбора и последующего просмотра информации существуют готовые решения с написанными веб панелями. Я посмотрел на некоторые из них. Что-то мне показалось слишком сложным в настройке, где-то веб интерфейс не понравился. Для себя остановился на приведенном варианте.

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

Рекомендую полезные материалы по CentOS:
Настройки системы
  • Установка
  • Базовая настройка
  • Настройка времени
  • Настройка сети
  • Настройка репозиториев
  • Настройка iptables
Установка CentOS 7 в конфигурации minimal или netinstall с загрузочной флешки или по сети на диск или raid раздел.
Базовая настройка CentOS 7 для работы с любым функционалом. Приведены практические советы по улучшению безопасности и удобства администрирования.
Как установить точное время на сервере CentOS, настроить часовой пояс, синхронизировать время с помощью ntpdate и ntpd и другое.
Подробное описание настройки сети в CentOS 7 - задать ip адрес, dhcp, отключить ipv6, dns, hostname, статические маршруты и др.
Установка репозиториев epel, rpmforge и др. Добавление, удаление, обновление rpm репозиториев в CentOS.
Рассмотрены основные моменты настройки iptables в Centos 7 - установка, добавление правил, проброс портов, nat, логирование и д.р.
Настройка программных комплексов
 
  • Прокси сервер
  • Шлюз
  • Asterisk
  • Asterisk+Freepbx
  • Сервер VPN
  • Web сервер Apache
  • Web сервер Nginx
  • Почтовый сервер
Подробное описание настройки прокси сервера на базе CentOS 7 со связкой squid+AD+sams2, реализован запрет доступа по url и группам пользователей.
Простая и быстрая настройка шлюза на базе CentOS 7 для организации доступа в интернет из локальной сети.
Описание установки и настройки asterisk - популярной современной sip атс. Описан расширенный функционал, покрывающий большинство потребностей стандартного офиса в современной телефонии.
Подробное описание установки voip сервера asterisk и панели управления freepbx на CentOS 7.
Установка и настройка OpenVPN сервера на CentOS для объединения офисов и подключения удаленных пользователей
Настройка web сервера CentOS 7 на базе связки http сервера apache, php и сервера db mysql, или коротко - установка lamp.
Установка и настройка высокопроизводительного web сервера на базе nginx и php fpm. В качестве кэша используется APC.

Описание установки и настройки почтового сервера iRedMail на основе готовой сборки на CentOS 7. Обзор основных возможностей и рекомендации по настройке.

Самостоятельная настройки почтового сервера postfix + dovecot а так же дополнительных полезных модулей для полноценной и удобной работы почты.

Размышления на тему выбора почтового сервера для малых и средних компаний.

Настройка отдельных программ
 
  • Zabbix
  • Phpmyadmin
  • Webmin
  • Ruby
  • Обновление php
  • Vsftpd
  • Bind
  • Unison
  • Observium
  • Syslog-NG
Видео и подробное описание установки и настройки Zabbix 3.2, а также установка агентов на linux и windows и подключение их к мониторингу.
Подробное описание установки и настройки панели управления phpmyadmin на веб сервер apache и nginx под управлением Centos 7.
Подробное описание установки и настройки Webmin на CentOS 7 для удаленного подключения и управления сервером.
Подробное описание установки языка Ruby последней версии на веб сервер под управлением CentOS 7.
Подробное описание установки или обновления php 7 на CentOS 7. Рассмотрен вариант отката обновления и возврата на php 5.6 или 5.4.
Подробное описание с видео установки и настройки ftp сервера vsftpd, примеры с локальными и виртуальные пользователями в mysql.
Настройка DNS сервера BIND (Named) в CentOS 7. Рассмотрены наиболее популярные конфигурации, в том числе подробное логирование.
Установка Unison в CentOS 7 для двухсторонней синхронизации файлов.
Инструкция по установке и настройке сервера мониторинга Observium на CentOS 7. В качестве примера в конце добавлено одно устройство для мониторинга.
Настройка сервера для централизованного сбора логов с удаленных устройств и серверов с помощью программы syslog-ng.
Разное
  • Настройка ssl в Apache
  • Бэкап с помощью rsync
Настройка работы веб сервера apache с виртуальными хостами по протоколу https с использованием бесплатного ssl сертификата.
Подробное описание настройки бэкапа с помощью rsync на примере скрипта инкрементного архива на системе Centos, Debian, Ubuntu, Windows.

Помогла статья? Есть возможность отблагодарить автора

10 комментариев

  1. День добрый, все делаю по инструкции, дохожу до ввода команды:

    systemctl start syslog-ng

    выдает ошибку:

    [root@localhost ~]# systemctl start syslog-ng
    Job for syslog-ng.service failed because the control process exited with error code. See «systemctl status syslog-ng.service» and «journalctl -xe» for details.

    вот вывод команды
    [root@localhost ~]# systemctl status syslog-ng.service
    ● syslog-ng.service — System Logger Daemon
    Loaded: loaded (/usr/lib/systemd/system/syslog-ng.service; enabled; vendor preset: enabled)
    Active: failed (Result: start-limit) since Wed 2017-04-12 18:15:11 MSK; 16s ago
    Docs: man:syslog-ng(8)
    Process: 10813 ExecStart=/usr/sbin/syslog-ng -F -p /var/run/syslogd.pid (code=exited, status=2)
    Main PID: 10813 (code=exited, status=2)
    Status: «Starting up… (Wed Apr 12 18:15:10 2017»

    подскажите в чем может быть проблема?

    • вроде разобрался сам, служба syslog-ng конфликтует со стандартной службой syslog, поэтому перед запуском первой последнюю нужно отключать:
      https://www.centos.org/forums/viewtopic.php?t=57379
      my syslog-ng failed on startup because it doesnt play nice with rsyslog (im thinking they both use port 514)
      systemctl disable rsyslog
      allowed me to systemctl start syslog-ng
      syslog-ng-3.5.6-3.el7.x86_64

  2. Я так понимаю что если ставить из исходников, а не через yum, то
    «Запускаем syslog-ng и добавляем в автозагрузку:» — не прокатит, там нужно еще что-о сделать?

    • По идее да, нужно скрипты запуска самим сделать. Обычно в исходниках где-то есть пример под каждую систему.

  3. Аноним

    Строго говоря, syslog-ng OSE ≠ syslog-ng [Premium Edition].

  4. Инструкция уже не работает, при внесении в конфиг строк:
    destination d_xs-zabbix { file(«/var/log/remote/xs-zabbix.log»); };
    filter f_xs-zabbix { netmask(«10.1.3.29/255.255.255.255»); };
    log { source(net); filter(f_xs-zabbix); destination(d_xs-zabbix); };

    Daemon не запускается, остановка и удаление rsyslog как писали выше не помогает:
    [root@log]# systemctl restart syslog-ng.service
    Job for syslog-ng.service failed because the control process exited with error code. See «systemctl status syslog-ng.service» and «journalctl -xe» for details.

    [root@log]# systemctl status syslog-ng.service
    ● syslog-ng.service — System Logger Daemon
    Loaded: loaded (/usr/lib/systemd/system/syslog-ng.service; enabled; vendor preset: enabled)
    Active: failed (Result: start-limit) since Thu 2018-02-15 17:58:27 MSK; 42s ago
    Docs: man:syslog-ng(8)
    Process: 2003 ExecStart=/usr/sbin/syslog-ng -F -p /var/run/syslogd.pid (code=exited, status=2)
    Main PID: 2003 (code=exited, status=2)
    Status: «Starting up… (Thu Feb 15 17:58:27 2018»

    Feb 15 17:58:27 log.local systemd[1]: Unit syslog-ng.service entered failed state.
    Feb 15 17:58:27 log.local systemd[1]: syslog-ng.service failed.
    Feb 15 17:58:27 log.local systemd[1]: syslog-ng.service holdoff time over, scheduling restart.
    Feb 15 17:58:27 log.local systemd[1]: start request repeated too quickly for syslog-ng.service
    Feb 15 17:58:27 log.local systemd[1]: Failed to start System Logger Daemon.
    Feb 15 17:58:27 log.local systemd[1]: Unit syslog-ng.service entered failed state.
    Feb 15 17:58:27 log.local systemd[1]: syslog-ng.service failed.
    Feb 15 17:58:27 log.local systemd[1]: start request repeated too quickly for syslog-ng.service
    Feb 15 17:58:27 log.local systemd[1]: Failed to start System Logger Daemon.
    Feb 15 17:58:27 log.local systemd[1]: syslog-ng.service failed.

    • А в /var/log/messages что-то есть на этот счет? Не понятно, в чем ошибка. Обычно в логе есть информация на эту тему.

      • Ничего необычно я не увидел.

        Feb 15 17:47:23 log-n1 yum[1749]: Installed: syslog-ng-3.5.6-3.el7.x86_64
        Feb 15 17:47:36 log-n1 systemd: Reloading.
        Feb 15 17:47:40 log-n1 systemd: Listening on Syslog Socket.
        Feb 15 17:47:40 log-n1 systemd: Starting Syslog Socket.
        Feb 15 17:47:40 log-n1 systemd: Starting System Logger Daemon…
        Feb 15 17:47:40 log-n1 syslog-ng[1914]: syslog-ng starting up; version=’3.5.6′
        Feb 15 17:47:40 log-n1 systemd[1]: Listening on Syslog Socket.
        Feb 15 17:47:40 log-n1 systemd[1]: Starting Syslog Socket.
        Feb 15 17:47:40 log-n1 systemd[1]: Starting System Logger Daemon…
        Feb 15 17:47:40 log-n1 systemd: Started System Logger Daemon.
        Feb 15 17:47:40 log-n1 systemd[1]: Started System Logger Daemon.
        Feb 15 17:52:41 log-n1 syslog-ng[1914]: syslog-ng shutting down; version=’3.5.6′
        Feb 15 17:52:41 log-n1 systemd[1]: Stopping System Logger Daemon…
        Feb 15 17:52:41 log-n1 systemd: Stopping System Logger Daemon…
        Feb 15 17:52:41 log-n1 systemd: Starting System Logger Daemon…
        Feb 15 17:52:41 log-n1 systemd: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
        Feb 15 17:52:41 log-n1 systemd: Failed to start System Logger Daemon.
        Feb 15 17:52:41 log-n1 systemd: Unit syslog-ng.service entered failed state.
        Feb 15 17:52:41 log-n1 systemd: syslog-ng.service failed.
        Feb 15 17:52:41 log-n1 systemd: syslog-ng.service holdoff time over, scheduling restart.
        Feb 15 17:52:41 log-n1 systemd: Starting System Logger Daemon…
        Feb 15 17:52:41 log-n1 systemd: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
        Feb 15 17:52:41 log-n1 systemd: Failed to start System Logger Daemon.
        Feb 15 17:52:41 log-n1 systemd: Unit syslog-ng.service entered failed state.
        Feb 15 17:52:41 log-n1 systemd: syslog-ng.service failed.
        Feb 15 17:52:42 log-n1 systemd: syslog-ng.service holdoff time over, scheduling restart.
        Feb 15 17:52:42 log-n1 systemd: Starting System Logger Daemon…
        Feb 15 17:52:42 log-n1 systemd: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
        Feb 15 17:52:42 log-n1 systemd: Failed to start System Logger Daemon.
        Feb 15 17:52:42 log-n1 systemd: Unit syslog-ng.service entered failed state.
        Feb 15 17:52:42 log-n1 systemd: syslog-ng.service failed.
        Feb 15 17:52:42 log-n1 systemd: syslog-ng.service holdoff time over, scheduling restart.
        Feb 15 17:52:42 log-n1 systemd: Starting System Logger Daemon…
        Feb 15 17:52:42 log-n1 systemd: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
        Feb 15 17:52:42 log-n1 systemd: Failed to start System Logger Daemon.
        Feb 15 17:52:42 log-n1 systemd: Unit syslog-ng.service entered failed state.
        Feb 15 17:52:42 log-n1 systemd: syslog-ng.service failed.
        Feb 15 17:52:42 log-n1 systemd: syslog-ng.service holdoff time over, scheduling restart.
        Feb 15 17:52:42 log-n1 systemd: Starting System Logger Daemon…
        Feb 15 17:52:42 log-n1 systemd: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
        Feb 15 17:52:42 log-n1 systemd: Failed to start System Logger Daemon.
        Feb 15 17:52:42 log-n1 systemd: Unit syslog-ng.service entered failed state.
        Feb 15 17:52:42 log-n1 systemd: syslog-ng.service failed.
        Feb 15 17:52:42 log-n1 systemd: syslog-ng.service holdoff time over, scheduling restart.
        Feb 15 17:52:42 log-n1 systemd: start request repeated too quickly for syslog-ng.service
        Feb 15 17:52:42 log-n1 systemd: Failed to start System Logger Daemon.
        Feb 15 17:52:42 log-n1 systemd: Unit syslog-ng.service entered failed state.
        Feb 15 17:52:42 log-n1 systemd: syslog-ng.service failed.
        Feb 15 17:52:42 log-n1 systemd: start request repeated too quickly for syslog-ng.service
        Feb 15 17:52:42 log-n1 systemd: Failed to start System Logger Daemon.
        Feb 15 17:52:42 log-n1 systemd: Unit syslog.socket entered failed state.
        Feb 15 17:52:42 log-n1 systemd: syslog-ng.service failed.
        Feb 15 17:53:11 log-n1 systemd: Listening on Syslog Socket.

        • Разобрался, теперь работает, конфиг /etc/syslog-ng/syslog-ng.conf по умолчанию не настроен на принятие логов от удаленных хостов (внезапно!), поэтому в него обязательно необходимо добавить секцию:
          ===
          source net {
          udp(ip(0.0.0.0) port(514));
          };
          ===
          также возможно придется сделать следующее:
          nano /etc/systemd/journald.conf
          [Journal]
          ForwardToSyslog=yes
          $ systemctl restart systemd-journald.service
          $ systemctl restart syslog-ng.service

          P.S. Пакет syslog-ng.x86_64, @version:3.5.6

  5. Спасибо за материал! Очень интересно и хорошо изложено.
    И да, в syslog-ng.conf нужно раскомментировать строку:
    #udp(ip(0.0.0.0) port(514));
    перед тем как запускать syslog-ng.

Добавить комментарий

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.