Rsyslog — это система управления логами для Unix-подобных операционных систем, предназначенная для сбора, хранения и передачи логов от различных приложений и системных компонентов.
Она позволяет собирать сообщения о событиях из разных источников, таких как системные службы и приложения, и сохранять их в файлы на диске для последующего анализа. Кроме того, rsyslog может отправлять логи на удаленные серверы, что удобно для централизованного управления. Конфигурация осуществляется через специальные файлы, где указываются источники логов и форматы сообщений. Rsyslog также поддерживает фильтрацию и обработку сообщений, а также различные модули, которые расширяют его функциональность. В целом, это мощный инструмент, обеспечивающий гибкость и масштабируемость в управлении логами.
У syslog имеются категории и уровни логов.
Система логирования syslog использует различные категории и уровни логов для организации и классификации сообщений.
Категории логов определяют, откуда поступают сообщения. Основные категории включают в себя системные сообщения, сообщения от приложений, сообщения от служб и устройств. Каждая категория помогает администратору понять, какой компонент системы генерирует лог.
Вот некоторые из них:
№ | Категория | Описание |
0 | kern | Сообщения, отправляемые ядром |
1 | user | Пользовательские программы |
2 | Почта | |
3 | daemon | Сервисы (демоны) |
4 | auth | Безопасность/вход в систему/аутентификация |
5 | syslog | Сообщения от syslog |
6 | lpr | Логи печати |
7 | news | Новостные группы (usenet) |
8 | uucp | Unix-to-Unix CoPy (копирование файлов между компьютерами) |
Уровни логов, в свою очередь, указывают на важность или серьезность сообщения. Основные уровни включают:
№ | Уровень | Расшифровка |
0 | emerg | Система не работает (PANIC) |
1 | alert | Серьезная проблема, требующая внимания |
2 | crit | Критическая ошибка |
3 | err | Ошибка (ERROR) |
4 | warning | Предупреждение (WARN) |
5 | notice | Важное информационное сообщение |
6 | info | Информационное сообщение |
7 | debug | Отладочная информация |
Установите rsyslog:
apt-get install rsyslog -y
Отройте файл конфигурации /etc/rsyslog.d/00_common.conf, вы увидите следующее:
#### MODULES ####
#module(load="imjournal") # provides support for systemd-journald logging
#module(load="imuxsock") # provides support for local system logging (e.g. via logger command)
#module(load="imklog") # provides kernel logging support (previously done by rklogd)
#module(load="immark") # provides --MARK-- message capability
# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
# module(load="imudp") # needs to be done just once
# input(type="imudp" port="514")
# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
# module(load="imtcp") # needs to be done just once
# input(type="imtcp" port="514")
#### GLOBAL DIRECTIVES ####
# Use default timestamp format
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat"
DirCreateMode="0755"
FileCreateMode="0640"
fileOwner="root"
fileGroup="adm")
# An "In-Memory Queue" is created for remote logging.
global(workDirectory="/var/spool/rsyslog") # where to place spool files
Нужно раскомментировать модули imudp и imtcp чтобы rsyslog мог получать логи с удаленных узлов, и создать шаблон сбора логов с клиентов (мы добавим его в самый низ). Окончательный файл будет выглядеть так:
#### MODULES ####
#module(load="imjournal") # provides support for systemd-journald logging
#module(load="imuxsock") # provides support for local system logging (e.g. via logger command)
#module(load="imklog") # provides kernel logging support (previously done by rklogd)
#module(load="immark") # provides --MARK-- message capability
# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")
# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")
#### GLOBAL DIRECTIVES ####
# Use default timestamp format
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat"
DirCreateMode="0755"
FileCreateMode="0640"
fileOwner="root"
fileGroup="adm")
# An "In-Memory Queue" is created for remote logging.
global(workDirectory="/var/spool/rsyslog") # where to place spool files
$template RemoteLogs, "/opt/%HOSTNAME%.log"
*.* ?RemoteLogs
& ~
Запустите rsyslog:
systemctl enable --now rsyslog
На Linux агентом сбора логов будет выступать так же rsyslog, а на Eltex уже реализована поддержка сбора и отправки syslog.
esr# config
esr(config)# logging syslog configuration
esr(config)# syslog console
esr(config-syslog-console)# severity warning
esr(config-syslog-console)# exit
esr(config)# syslog host server
esr(config-syslog-host)# remote-address 192.168.10.2
esr(config-syslog-host)# port 514
esr(config-syslog-host)# severity warning
esr(config-syslog-host)# transport tcp
esr(config-syslog-host)# end
esr# commit
esr# confirm
Установите rsyslog:
apt-get install rsyslog -y
Отройте файл /etc/rsyslog.d/00_common.conf, раскомментируйте в нем первые четыре модуля (они начнут собирать логи) и добавьте в конец шаблон для отправки логов на сервер:
#### MODULES ####
module(load="imjournal") # provides support for systemd-journald logging
module(load="imuxsock") # provides support for local system logging (e.g. via logger command)
module(load="imklog") # provides kernel logging support (previously done by rklogd)
module(load="immark") # provides --MARK-- message capability
# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
# module(load="imudp") # needs to be done just once
# input(type="imudp" port="514")
# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
# module(load="imtcp") # needs to be done just once
# input(type="imtcp" port="514")
#### GLOBAL DIRECTIVES ####
# Use default timestamp format
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat"
DirCreateMode="0755"
FileCreateMode="0640"
fileOwner="root"
fileGroup="adm")
# An "In-Memory Queue" is created for remote logging.
global(workDirectory="/var/spool/rsyslog") # where to place spool files
*.warning @@192.168.10.2:514
Перезагрузите демон:
systemctl enable --now rsyslog
У вас на сервере HQ-SRV в директории /opt должны появится логи от 3-х клиентов:
-rw-------- 1 root root 860 Mar 12 03:13 _gateway.log #Это HQ-RTR
-rw-------- 1 root root 1215 Mar 12 03:13 br-srv.log
-rw-------- 1 root root 1180 Mar 12 03:11 pool-100-10-10-2.prvdri.fios.verizon.net.log #Это BR-RTR
Они могут появится не сразу, так как мы собираем только warning события.
Для ротации логов мы будет использовать пакет logrotate, в ALT Server он уже предустановлен.
Перейдите на сервер сбора логов (HQ-SRV).
Создайте /etc/logrotate.d/rsyslog:
/opt/*.log {
weekly # Ротация раз в неделю
size 10M # Минимальный размер логов для ротации – 10 МБ
compress # Сжимать логи после ротации
delaycompress # Откладывать сжатие до следующей ротации
missingok # Не выдавать ошибку, если файл отсутствует
notifempty # Не ротация, если файл пустой
create 0640 root root # Создавать новый файл с указанными правами
sharedscripts # Выполнять скрипты только один раз для всех файлов
postrotate
/usr/bin/systemctl reload rsyslog > /dev/null 2>&1 || true # Перезапуск rsyslog после ротации
endscript
}
Чтобы ротация была автоматической нужно использовать cron, для этого введите команду EDITOR=vim crontab -e.
И в открывшийся файл введите:
0 0 * * 0 /usr/sbin/logrotate -f /etc/logrotate.d/rsyslog
Проверьте ротацию запустив logrotate в режиме отладки:
logrotate -d /etc/logrotate.d/rsyslog
В выводе будет написано, что для ротации рано, так как логи еще не достигли указанного объема.