Сервер журналов · 6 min read · Nov 15, 2025
Установка централизованного сервера журналов с Rsyslog в Debian 9
В Linux файлы журналов — это файлы, содержащие сообщения о функциях системы, которые используются системными администраторами для выявления возможных проблем на машинах. Журналы помогают администраторам визуализировать события, происходившие в системе за определенные промежутки времени. Обычно все файлы журналов хранятся в каталоге /var/log в Linux. В этом месте есть несколько типов файлов журналов для хранения различных сообщений, таких как файл журнала для записи системных событий, файл журнала для сообщений, связанных с безопасностью, другие файлы журналов, посвященные ядру, пользователям или заданиям cron. Основная цель файлов журналов — устранение неполадок в системе. Большинство файлов журналов в Linux контролируются службой rsyslogd. В более новых версиях дистрибутивов Linux файлы журналов также контролируются и управляются службой journald, которая является частью программы инициализации systemd. Журналы, хранящиеся демоном журнала, записываются в двоичном формате и в основном являются временными, хранятся в ОЗУ и в кольцевом буфере в /run/log/journal/. Однако службу журнала также можно настроить для постоянного хранения сообщений Syslog.
В Linux сервер rsyslog можно настроить для работы в качестве центрального менеджера журналов, в модели клиент-сервер, и отправлять сообщения журналов по сети через протоколы передачи TCP или UDP или получать журналы от сетевых устройств, серверов, маршрутизаторов, коммутаторов или других систем или встроенных устройств, которые генерируют журналы.
Демон Rsyslog может быть настроен для работы одновременно в качестве клиента и сервера. Настроенный для работы в качестве сервера, Rsyslog будет слушать на стандартном порту 514 TCP и UDP и начнет собирать сообщения журналов, которые отправляются по сети удаленными системами. В качестве клиента Rsyslog будет отправлять по сети внутренние сообщения журналов на удаленный сервер Ryslog через те же порты TCP или UDP.
Rsyslog будет фильтровать сообщения syslog в соответствии с выбранными свойствами и действиями. Фильтры rsyslog следующие:
- Фильтры по службе или приоритету
- Фильтры на основе свойств
- Фильтры на основе выражений
Фильтр службы представлен внутренней подсистемой Linux, которая производит журналы. Они классифицируются следующим образом:
- auth/authpriv = сообщения, производимые процессами аутентификации
- cron = журналы, связанные с заданиями cron
- daemon = сообщения, связанные с работающими системными службами
- kernel = сообщения ядра Linux
- mail = сообщения почтового сервера
- syslog = сообщения, связанные с syslog или другими демонами (сервер DHCP отправляет журналы сюда)
- lpr = сообщения принтеров или сервера печати
- local0 - local7 = пользовательские сообщения под контролем администратора
Уровни приоритета или серьезности присваиваются ключевому слову и числу, как описано ниже.
- emerg = Аварийная ситуация – 0
- alert = Оповещения – 1
- err = Ошибки – 3
- warn = Предупреждения – 4
- notice = Уведомление – 5
- info = Информация – 6
- debug = Отладка – 7 высший уровень
Существуют также некоторые специальные ключевые слова Rsyslog, такие как знак звездочки ( *) для определения всех служб или приоритетов, ключевое слово none, которое указывает на отсутствие приоритетов, знак равенства ( =) для выбора только этого приоритета и восклицательный знак ( !) для отрицания приоритета.
Часть действия syslog представлена оператором назначения. Назначение сообщения журнала может быть файлом, хранящимся в файловой системе, файлом в системном пути /var/log/, другим локальным процессом ввода через именованный канал или FIFO. Сообщения журналов также могут быть направлены пользователям, отброшены в черную дыру (/dev/null) или отправлены на stdout или на удаленный сервер syslog через протокол TCP/UDP. Сообщения журналов также могут храниться в базе данных, такой как MySQL или PostgreSQL.
Настройка Rsyslog в качестве сервера
Демон Rsyslog автоматически устанавливается в большинстве дистрибутивов Linux. Однако, если Rsyslog не установлен на вашей системе, вы можете выполнить одну из следующих команд для установки службы; вам потребуются права root для выполнения команд.
В дистрибутивах на базе Debian:
sudo apt-get install rsyslogВ дистрибутивах на базе RHEL, таких как CentOS:
sudo yum install rsyslogЧтобы проверить, запущен ли демон Rsyslog на системе, выполните следующие команды в зависимости от версии вашего дистрибутива.
На новых дистрибутивах Linux с systemd:
systemctl status rsyslog.serviceНа старых версиях Linux с init:
service rsyslog status/etc/init.d/rsyslog statusЧтобы запустить демон rsyslog, выполните следующую команду.
На старых версиях Linux с init:
service rsyslog start/etc/init.d/rsyslog startНа последних дистрибутивах Linux:
systemctl start rsyslog.serviceЧтобы настроить программу rsyslog для работы в режиме сервера, отредактируйте основной конфигурационный файл в /etc/rsyslog.conf. В этом файле внесите следующие изменения, как показано в приведенном ниже примере.
sudo vi /etc/rsyslog.confНайдите и раскомментируйте, удалив хештег (#), следующие строки, чтобы разрешить прием сообщений журналов UDP на порту 514. По умолчанию порт UDP используется syslog для отправки и получения сообщений.
$ModLoad imudp
$UDPServerRun 514Поскольку протокол UDP ненадежен для обмена данными по сети, вы можете настроить Rsyslog для вывода сообщений журналов на удаленный сервер через протокол TCP. Чтобы включить протокол приема TCP, откройте файл /etc/rsyslog.conf и раскомментируйте следующие строки, как показано ниже. Это позволит демону rsyslog привязываться и слушать на TCP-сокете на порту 514.
$ModLoad imtcp
$InputTCPServerRun 514 Оба протокола могут быть включены в rsyslog для одновременной работы.
Если вы хотите указать, каким отправителям вы разрешаете доступ к демону rsyslog, добавьте следующую строку после включенных строк протокола:
$AllowedSender TCP, 127.0.0.1, 10.110.50.0/24, *.yourdomain.comВам также потребуется создать новый шаблон, который будет обрабатываться демоном rsyslog перед получением входящих журналов. Шаблон должен указывать локальному серверу Rsyslog, где хранить входящие сообщения журналов. Определите шаблон сразу после строки $AllowedSender, как показано в приведенном ниже примере.
$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
**.* *?Incoming-logs
& ~** Чтобы записывать только сообщения, сгенерированные службой kern, используйте следующий синтаксис.
kern.* ?Incoming-logsПолученные журналы обрабатываются вышеуказанным шаблоном и будут храниться в локальной файловой системе в каталоге /var/log/, в файлах, названных в соответствии с именем хоста клиента, который произвел сообщения: переменные %HOSTNAME% и %PROGRAMNAME%.
Нижеуказанное & ~ правило перенаправления настраивает демон Rsyslog на сохранение входящих сообщений журналов только в указанные выше файлы, заданные именами переменных. В противном случае полученные журналы будут дополнительно обрабатываться и также храниться в содержимом локальных журналов, таких как файл /var/log/syslog.
Чтобы добавить правило для отбрасывания всех связанных сообщений журналов о почте, вы можете использовать следующее выражение.
mail.* ~Другие переменные, которые можно использовать для вывода имен файлов, включают: %syslogseverity%, %syslogfacility%, %timegenerated%, %HOSTNAME%, %syslogtag%, %msg%, %FROMHOST-IP%, %PRI%, %MSGID%, %APP-NAME%, %TIMESTAMP%, %$year%, %$month%, %$day%
Начиная с версии Rsyslog 7, новый формат конфигурации может использоваться для объявления шаблона на сервере Rsyslog.
Пример шаблона версии 7 может выглядеть следующим образом:
template(name="MyTemplate" type="string"
string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log"
)Другой способ записи вышеуказанного шаблона также может выглядеть следующим образом:
template(name="MyTemplate" type="list") { constant(value="/var/log/") property(name="fromhost-ip") constant(value="/") property(name="programname" SecurePath="replace") constant(value=".log") }* ***
Чтобы применить любые изменения, внесенные в файл конфигурации rsyslog, вы должны перезапустить демон, чтобы загрузить новую конфигурацию.
sudo service rsyslog restartsudo systemctl restart rsyslogЧтобы проверить, какие сокеты rsyslog находятся в состоянии прослушивания на системе Debian Linux, вы можете выполнить команду netstat с правами root. Передайте результаты через утилиту фильтрации, такую как grep.
sudo netstat –tulpn | grep rsyslogИмейте в виду, что вам также необходимо открыть порты Rsyslog в брандмауэре, чтобы разрешить установление входящих соединений.
В дистрибутивах на базе RHEL с активированным Firewalld выполните следующие команды:
firewall-cmd --permanent --add-port=514/tcpfirewall-cmd --permanent --add-port=514/tcpfirewall-cmd –reloadВ дистрибутивах на базе Debian с активным брандмауэром UFW выполните следующие команды:
ufw allow 514/tcpufw allow 514/udpПравила брандмауэра iptables:
iptables -A INPUT -p tcp -m tcp --dport 514 -j ACCEPTiptables -A INPUT -p udp --dport 514 -j ACCEPTНастройка Rsyslog в качестве клиента
Чтобы включить демон rsyslog для работы в клиентском режиме и выводить локальные сообщения журналов на удаленный сервер Rsyslog, отредактируйте файл /etc/rsyslog.conf и добавьте одну из следующих строк:
*. * @IP_REMOTE_RSYSLOG_SERVER:514*. * @FQDN_RSYSLOG_SERVER:514Эта строка позволяет службе Rsyslog выводить все внутренние журналы на удаленный сервер Rsyslog по UDP порту 514.
Чтобы отправить журналы через протокол TCP, используйте следующий шаблон:
*. * @@IP_reomte_syslog_server:514Чтобы выводить только журналы, связанные с cron, со всеми приоритетами на сервер rsyslog, используйте следующий шаблон:
cron.* @ IP_reomte_syslog_server:514В случаях, когда сервер Rsyslog недоступен по сети, добавьте следующие строки в файл /etc/rsyslog.conf на стороне клиента, чтобы временно хранить журналы в файле с буферизацией на диске, пока сервер не станет доступен.
$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1Чтобы применить вышеуказанные правила, демону Rsyslog необходимо перезапуститься, чтобы действовать как клиент.
Get new posts in your inbox
No spam. Unsubscribe anytime.