Поиск по сайту:

Как настроить центральный сервер журналирования с помощью Rsyslog в Linux


Журналы — важнейший компонент любого программного обеспечения или операционной системы. Журналы обычно записывают действия пользователя, системные события, сетевую активность и многое другое, в зависимости от того, для чего они предназначены. Одной из наиболее широко используемых систем журналирования в системах Linux является rsyslog.

Rsyslog — это мощная, безопасная и высокопроизводительная система обработки журналов, которая принимает данные из различных типов источников (систем/приложений) и выводит их в различные форматы.

Он превратился из обычного демона syslog в полнофункциональную систему журналирования корпоративного уровня. Он разработан по модели клиент/сервер, поэтому его можно настроить как клиент и/или как центральный сервер журналирования для других серверов, сетевых устройств и удаленных приложений.

Тестовая среда

Для целей данного руководства мы будем использовать следующие хосты:

  • Сервер: 192.168.241.140
  • Клиент: 172.31.21.58

Как установить и настроить сервер Rsyslog

Большинство дистрибутивов Linux поставляются с предустановленным пакетом rsyslog. Если он не установлен, вы можете установить его с помощью диспетчера пакетов Linux, как показано.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04

После установки rsyslog вам необходимо запустить службу, включить ее автоматический запуск при загрузке и проверить ее статус с помощью команды systemctl.

sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

Основной файл конфигурации rsyslog расположен по адресу /etc/rsyslog.conf. Он загружает модули, определяет глобальные директивы, содержит правила обработки сообщений журнала, а также включает все файлы конфигурации в /etc. /rsyslog.d/ для различных приложений/сервисов.

sudo vim /etc/rsyslog.conf

По умолчанию rsyslog использует модули imjournal и imusock для импорта структурированных сообщений журнала из systemd Journal и для принятия системного журнала. сообщения от приложений, работающих в локальной системе, через сокеты Unix соответственно.

Чтобы настроить rsyslog в качестве сетевого/центрального сервера журналирования, вам необходимо установить протокол (либо UDP, либо TCP, либо оба), который он будет использовать для удаленного приема системного журнала, а также порт, который он слушает.

Если вы хотите использовать соединение UDP, которое является более быстрым, но ненадежным, найдите и раскомментируйте строки ниже (замените 514 портом, который вы хотите прослушивать, это должно соответствовать адресу порта, на который клиенты отправляют сообщения, мы рассмотрим это подробнее при настройке клиента rsyslog).

$ModLoad imudp
$UDPServerRun 514

Чтобы использовать соединение TCP (которое медленнее, но более надежно), найдите и раскомментируйте строки ниже.

$ModLoad imtcp
$InputTCPServerRun 514

В этом случае мы хотим одновременно использовать соединения UDP и TCP.

Далее вам необходимо определить набор правил для обработки удаленных журналов в следующем формате.

facility.severity_level	destination (where to store log)

Где :

  • facility: тип сообщения, генерирующего процесс/приложение. Сюда входят auth, cron, daemon, kernel, local0..local7. Использование * означает все возможности.
  • уровень_серьезности: тип сообщения журнала: emerg-0, alert-1, crit-2, err-3, alert-4, уведомления-5, info-6, debug-7. Использование * означает все уровни серьезности, а значение «Нет» означает отсутствие уровня серьезности.
  • назначение: локальный файл или удаленный сервер rsyslog (определяется в форме IP:порт).

Мы будем использовать следующий набор правил для сбора журналов с удаленных хостов, используя шаблон RemoteLogs. Обратите внимание, что эти правила должны предшествовать любым правилам обработки локальных сообщений, как показано на снимке экрана.

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs 
& ~

Если посмотреть на приведенный выше набор правил, первое правило — это “$template RemoteLogs”/var/log/%HOSTNAME%/%PROGRAMNAME%.log” ”.

Директива $template сообщает демону rsyslog собирать и записывать все полученные удаленные сообщения в отдельные журналы в /var/log на основе имени хоста. > (имя клиентского компьютера) и удаленное клиентское средство (программа/приложение), сгенерировавшее сообщения, как определено настройками, присутствующими в шаблоне RemoteLogs.

Вторая строка “*.* ?RemoteLogs” означает запись сообщений со всех объектов на всех уровнях серьезности с использованием конфигурации шаблона RemoteLogs.

Последняя строка “& ~ ” указывает rsyslog прекратить обработку сообщений после их записи в файл. Если вы не укажете “& ~”, сообщения будут записываться в локальные файлы.

Существует множество других шаблонов, которые вы можете использовать. Дополнительную информацию см. на странице руководства по настройке rsyslog (man rsyslog.conf) или в онлайн-документации Rsyslog.

Вот и все, что касается настройки сервера rsyslog. Сохраните и закройте файл конфигурации. Чтобы применить последние изменения, перезапустите демон rsyslog с помощью следующей команды.

sudo systemctl restart rsyslog

Теперь проверьте сетевые сокеты rsyslog. Используйте команду ss (или команду netstat с теми же флагами) и передайте вывод в grep, чтобы отфильтровать соединения rsyslogd.

sudo ss -tulnp | grep "rsyslog"

Затем в CentOS 7, если у вас включен SELinux, выполните следующие команды, чтобы разрешить трафик rsyslog в зависимости от типа сетевого сокета.

sudo semanage -a -t syslogd_port_t -p udp 514
sudo semanage -a -t syslogd_port_t -p tcp 514 

Если в системе включен брандмауэр, вам необходимо открыть порт 514, чтобы разрешить оба соединения UDP/TCP к серверу rsyslog, запустив его.

------------- On CentOS ------------- 
sudo firewall-cmd --permanent --add-port=514/udp
sudo firewall-cmd --permanent --add-port=514/tcp
sudo firewall-cmd --reload

------------- On Ubuntu -------------
sudo ufw allow 514/udp
sudo ufw allow 514/tcp
sudo ufw reload 

Как настроить клиент Rsyslog для отправки журналов на сервер Rsyslog

Теперь в клиентской системе проверьте, запущена ли служба rsyslog, с помощью следующей команды.

sudo systemctl status rsyslog

Если он не установлен, установите его и запустите службу, как показано ранее.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04
sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

После запуска службы rsyslog откройте основной файл конфигурации, в котором вы внесете изменения в конфигурацию по умолчанию.

sudo vim /etc/rsyslog.conf

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

*. *  @@192.168.100.10:514

Вышеупомянутое правило будет отправлять сообщения со всех объектов и всех уровней серьезности. Чтобы отправлять сообщения из определенного объекта, например auth, используйте следующее правило.

auth. *  @@192.168.100.10:514

Сохраните изменения и закройте файл конфигурации. Чтобы применить вышеуказанные настройки, перезапустите демон rsyslog.

sudo systemctl restart rsyslog

Как отслеживать удаленную регистрацию на сервере Rsyslog

Последний шаг — проверить, действительно ли rsyslog получает и регистрирует сообщения от клиента в /var/log в форме имя_хоста/имя_программы.log.

Запустите команду ls для получения длинного списка родительского каталога журналов и проверьте, существует ли каталог с именем ip-172.31.21.58 (или какое-то другое имя хоста вашего клиентского компьютера).

 
ls -l /var/log/

Если каталог существует, проверьте файлы журналов внутри него, запустив.

sudo ls -l /var/log/ip-172-31-21-58/

Краткое содержание

Rsyslog — это высокопроизводительная система обработки журналов, разработанная в архитектуре клиент/сервер. Мы надеемся, что вы сможете установить и настроить Rsyslog в качестве центрального/сетевого сервера журналирования и в качестве клиента, как показано в этом руководстве.

Вы также можете обратиться к соответствующим страницам руководства по rsyslog для получения дополнительной помощи. Не стесняйтесь оставлять нам отзывы или задавать вопросы.