Как настроить центральный сервер журналирования с помощью 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 для получения дополнительной помощи. Не стесняйтесь оставлять нам отзывы или задавать вопросы.