ru:Rsyslog
- add simple IPv6 example
- wikify
- add systemd
Rsyslog — это система с открытым исходным кодом для высокопроизводительной обработки логов. Это не просто системный журнал, а универсальный инструмент, который может принимать данные из множества источников и отправлять их в различные места назначения.
Rsyslog поддерживает пересылку логов через IP-сеть, в базы данных, на почту и так далее, расширяя стандартные возможности протокола syslog благодаря мощным возможностям фильтрации. Это позволяет адаптировать конфигурацию под конкретные нужды.
Установка
USE флаги
USE flags for app-admin/rsyslog An enhanced multi-threaded syslogd with database support and more
+gcrypt
|
Add support for encrypted log files using dev-libs/libgcrypt |
+openssl
|
Build the OpenSSL network stream driver (requires dev-libs/openssl) |
+ssl
|
Add support for encrypted client/server communication (requires net-libs/gnutls) |
+uuid
|
Include UUIDs in messages (requires sys-apps/util-linux) |
clickhouse
|
Build the ClickHouse output module (requires net-misc/curl) |
curl
|
Enable http_request() function in RainerScript (requires net-misc/curl) |
dbi
|
Build the general database output module (requires dev-db/libdbi) |
debug
|
Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces |
doc
|
Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally |
elasticsearch
|
Build the Elasticsearch output module (requires net-misc/curl) |
gnutls
|
Build the GnuTLS network stream driver (requires net-libs/gnutls) |
imhttp
|
Build the http input module (requires www-servers/civetweb) |
impcap
|
Build the pcap input module (requires net-libs/libpcap) |
jemalloc
|
Use dev-libs/jemalloc for memory management |
kafka
|
Build the Apache Kafka input/output module (requires dev-libs/librdkafka) |
kerberos
|
Build the GSSAPI input and output module (requires virtual/krb5) |
kubernetes
|
Build the kubernetes modify plugin (requires net-misc/curl) |
mdblookup
|
Build the MaxMind DB lookup message modify plugin using dev-libs/libmaxminddb |
mongodb
|
Build the MongoDB output module (requires dev-libs/mongo-c-driver) |
mysql
|
Build the MySQL database output module (requires virtual/mysql) |
normalize
|
Build the normalize modify module (requires dev-libs/libee and dev-libs/liblognorm) |
omhttp
|
Build the http output module (requires net-misc/curl) |
omhttpfs
|
Build the httpfs output module (requires net-misc/curl) |
omudpspoof
|
Build the udpspoof output module (requires net-libs/libnet) |
postgres
|
Build the PostgreSQL database output module (requires dev-db/postgresql) |
rabbitmq
|
Build the RabbitMQ output module (requires net-libs/rabbitmq-c) |
redis
|
Build the Redis output module using (requires dev-libs/hiredis) |
relp
|
Build the Reliable Event Logging Protocol (RELP) output module (requires dev-libs/librelp) |
rfc3195
|
Build the rfc3195 input module (requires dev-libs/liblogging) |
rfc5424hmac
|
Build the rfc5424hmac modify module (requires dev-libs/openssl) |
snmp
|
Build the snmp modify and output module (requires net-analyzer/net-snmp) |
systemd
|
Build the journal input and output module (requires sys-apps/systemd) |
test
|
Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) |
usertools
|
Installs the user tools (rsgtutil, rscryutil...) corresponding to the set USE flags |
xxhash
|
Enable xxHash support in fmhash module (requires dev-libs/xxhash) |
zeromq
|
Build the ZeroMQ input and output modules (requires net-libs/czmq) |
Emerge
Установка app-admin/rsyslog:
root #
emerge --ask app-admin/rsyslog
Не рекомендуется запускать более одного системного логгера на одном хосте, так как другие локальные логгеры могут быть отключены или удалены.
Конфигурация
Переменные окружения
Список всех переменных окружения, которые можно узнать, введя команду: rsyslogd
- RSYSLOG_DEBUG — опции CSV: debug, debugondemand, lologtimestamp, nostdout, outputtidtostderr. Используйте RSYSLOG_DEBUG=help для получения дополнительной информации.
- RSYSLOG_MODDIR — полный путь к директории с используемыми модулями (по умолчанию /usr/lib/<GNU-trigraph>/rsyslog)
- RSYSLOG_DEBUGLOG — полный путь к файлу журнала отладки (по умолчанию отсутствует)
- RSYSLOG_DEBUG_TIMEOUTS_TO_STDERR — интервал времени для вывода отладочной информации (в секундах).
- RSYSLOG_DFLT_LOG_INTERNAL — используется тестовым стендом и определенными последовательностями запуска. Значение `1` эквивалентно $processInternalMessage=on
- LISTEN_PID — полный путь к файлу с идентификатором процесса (PID)
/etc/rsyslog.conf может содержать ключевые слова параметра environment, которые создают дополнительную переменную окружения.
Модули также могут использовать другие переменные окружения для изменения своих характеристик обработки. Смотрите исходный код конкретных модулей на наличие системных вызовов getenv().
Файлы
Файлы, которые считываются командой: rsyslogd
- /etc/rsyslog.conf — файл конфигурации rsyslogd
- /usr/lib/x86_64-linux-gnu/rsyslog/ — библиотека модулей для rsyslogd
- /proc/self/ns/net
- /var/run/netns/%s
- /dev/urandom — устройство источника случайных чисел ядра
Файлы, которые создаются командой: rsyslogd
- (различные файлы журналов)
- /dev/console
- /run/rsyslog.pid%s
Конфигурационные файлы
Существует три формата файла /etc/rsyslog.conf: расширенный, базовый, устаревший.
Тип формата | Используемые версии | Описание |
---|---|---|
расширенный | 7.0 до 8.2338+ | |
базовый | 5.0 до 6.9999 | |
устаревший | до 4.999 |
На этой странице рассматриваются как базовые, так и продвинутые аспекты.
Базовая конфигурация rsyslog:
$IncludeConfig /etc/rsyslog.d/
$FileCreateMode 0640
*.info;mail.none;authpriv.none;cron.none -/var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* -/var/log/cron
*.emerg .*
Обычно сообщения записываются в файлы, которые должны быть указаны с полным путем. Rsyslog использует простой синтаксис фильтрации для входящих сообщений. Сообщения syslog классифицируются по категории (facility) и уровню критичности (severity). Согласно RFC5424 определены следующие уровни критичности:
Критичность
Числовой код | Уровень | Описание |
---|---|---|
0 | emerg | система непригодна для использования |
1 | alert | требуется немедленное действие |
2 | crit | критические условия |
3 | error | ошибки |
4 | warning | предупреждения |
5 | notice | нормальное, но значимое событие |
6 | info | информационные сообщения |
7 | debug | отладочные сообщения |
Объекты
Список объектов (facilities), используемых rsyslog. Большинство названий объектов понятны сами по себе. Объекты local0 - local7 обычно используются, например, для сетевых журналов узлов и сетевого оборудования. В целом, это зависит от ситуации, как классифицировать журналы и назначать их объектам. Рассматривайте объекты скорее как инструмент, чем как директиву для выполнения.
Объекты можно настроить в соответствии с потребностями пользователя:
Числовой код | Объект | Описание |
---|---|---|
0 | kern | сообщения ядра |
1 | user | пользовательские сообщения |
2 | почтовая система | |
3 | daemon | системные демоны |
4 | auth | сообщения безопасности/авторизации |
5 | syslog | сообщения, генерируемые самим syslogd |
6 | lpr | подсистема принтера |
7 | news | подсистема сетевых новостей |
8 | uucp | подсистема UUCP |
9 | cron | демон планировщика |
10 | security | сообщения безопасности/авторизации |
11 | ftp | демон FTP |
12 | ntp | подсистема NTP |
13 | logaudit | аудит журналов |
14 | logalert | предупреждения журнала |
15 | clock | демон часов (примечание 2) |
16 | local0 | для локального использования 0 (local0) |
17 | local1 | для локального использования 1 (local1) |
18 | local2 | для локального использования 2 (local2) |
19 | local3 | для локального использования 3 (local3) |
20 | local4 | для локального использования 4 (local4) |
21 | local5 | для локального использования 5 (local5) |
22 | local6 | для локального использования 6 (local6) |
23 | local7 | для локального использования 7 (local7) |
Фильтрация
Список с примерами команд для фильтрации:
- Перенаправить все входящие сообщения от всех объектов и со всеми уровнями критичности в /var/log/syslog:
*.* -/var/log/syslog
- Отфильтровать сообщения с уровнем критичности "crit" и сохранить их в файл /var/log/critical:
*.crit -/var/log/critical
- НЕ перенаправлять объекты mail, authentication и cron в /var/log/messages, обратите внимание на ключевое слово none:
mail.none;authpriv.none;cron.none -/var/log/messages
Локальное логирование
Включить локальное логирование от всех объектов, чтобы видеть локальные события.
$ModLoad imuxsock.so
Удаленное логирование
Чтобы использовать удаленное логирование на syslog-сервер, укажите клиенту логировать на определенный сервер или серверы, а серверу принимать сообщения, отправленные клиентами. Перед настройкой выберите протокол. Сообщения syslog могут быть отправлены с использованием UDP или TCP. UDP является протоколом по умолчанию и поддерживается на большинстве платформ. Не все платформы поддерживают TCP для syslog.
Клиент
Чтобы включить отправку syslog-сообщений по UDP, добавьте следующую строку в файл /etc/rsyslog.conf. В этом примере rsyslog отправляет все объекты и все приоритеты *.* с использованием протокола UDP @ на удаленный сервер 192.0.2.1
*.* @192.0.2.1
Чтобы включить поддержку TCP для syslog-сообщений, добавьте следующую строку в файл конфигурации rsyslog, TCP включается добавлением @@.
*.* @@192.0.2.1
При желании можно использовать имена хостов вместо IP-адресов.
Замените
192.0.2.1
на IP-адрес удаленного сервера rsyslog, который настроен и работает для приема любых syslog через соответствующий номер порта с использованием UDP или TCP.Ниже приведен пример конфигурации syslog-клиента для отправки syslog-сообщений на удаленный сервер через TCP.
$ModLoad imuxsock.so
*.* @@192.0.2.1:10514
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* /var/log/maillog
cron.* /var/log/cron
*.emerg *
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
Сервер
Чтобы обеспечить прием журналов по UDP и запустить сервер на порту 514.
$ModLoad imudp $UDPServerRun 514
UDP не является надежным протоколом. Для большей надежности запустите сервер с поддержкой логирования по TCP.
$ModLoad imtcp $InputTCPServerRun 10514
Чтобы привязать UDP-порт к интерфейсу IP, настройте следующую запись, убедитесь в правильной последовательности определений при привязке к интерфейсу:
$ModLoad imudp $UDPServerAddress 192.0.2.1 # эта запись ДОЛЖНА быть перед директивой $UDPServerRun $UDPServerRun 514
Простая конфигурация (в базовом формате) будет выглядеть так:
$ModLoad imuxsock.so
$ModLoad imtcp.so
$InputTCPServerAddress 192.0.2.1
$InputTCPServerRun 10514
$ModLoad imudp.so
$UDPServerAddress 192.0.2.1
$UDPServerRun 514
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* /var/log/maillog
cron.* /var/log/cron
*.emerg *
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
Логирование в базу данных
Rsyslog поддерживает логирование в следующие базы данных:
- MariaDB
- MySQL
- PostgreSQL
- Oracle
После выбора базы данных, в которую будут сохраняться журналы, необходимо включить соответствующий USE-флаг и переустановить rsyslog перед продолжением. В этом примере используется база данных MySQL.
Следующие шаги предполагают работающий сервер базы данных MySQL, запущенный на localhost; для деталей установки следуйте статье MySQL.
Пакет содержит SQL-скрипт с именем createDB.sql для создания структуры базы данных.
CREATE DATABASE Syslog;
USE Syslog;
CREATE TABLE SystemEvents
(
ID int unsigned not null auto_increment primary key,
CustomerID bigint,
ReceivedAt datetime NULL,
DeviceReportedTime datetime NULL,
Facility smallint NULL,
Priority smallint NULL,
FromHost varchar(60) NULL,
Message text,
NTSeverity int NULL,
Importance int NULL,
EventSource varchar(60),
EventUser varchar(60) NULL,
EventCategory int NULL,
EventID int NULL,
EventBinaryData text NULL,
MaxAvailable int NULL,
CurrUsage int NULL,
MinUsage int NULL,
MaxUsage int NULL,
InfoUnitID int NULL ,
SysLogTag varchar(60),
EventLogType varchar(60),
GenericFileName VarChar(60),
SystemID int NULL
);
CREATE TABLE SystemEventsProperties
(
ID int unsigned not null auto_increment primary key,
SystemEventID int NULL ,
ParamName varchar(255) NULL ,
ParamValue text NULL
);
Импортируйте файл /usr/share/rsyslog/scripts/mysql/createDB.sql для создания базы данных Syslog
.
user $
mysql -u root -p < /usr/share/rsyslog/scripts/mysql/createDB.sql
Создайте пользователя базы данных для базы данных Syslog:
mysql>
GRANT ALL ON Syslog.* TO rsyslog-user@localhost IDENTIFIED BY - 'MySecretPassword';
mysql>
FLUSH PRIVILEGES;
Чтобы обеспечить поддержку логирования в базу данных SQL, включите нужный модуль в /etc/rsyslog.conf
$ModLoad ommysql.so
Сообщите rsyslog пересылать все данные в базу данных, добавьте следующее в конец файла /etc/rsyslog.conf:
*.* :ommysql:localhost,Syslog,rsyslog-user,MySecretPassword
Наконец, перезапустите сервер rsyslog, чтобы применить новые настройки
root #
/etc/init.d/rsyslog restart
Сервисы
Существует значительный конфликт между systemd и rsyslogd: старайтесь не смешивать их обоих, или, что еще хуже, не настраивать их на передачу сообщений друг другу (100% загрузка ЦП). Для максимальной гибкости и безопасности используйте rsyslogd.
OpenRC
Чтобы добавить демон rsyslogd в уровень запуска по умолчанию, чтобы логирование начиналось вместе с системой:
root #
rc-update add rsyslog default
После завершения установки rsyslog должен работать из коробки с настройками по умолчанию; по крайней мере для локального логирования.
Чтобы запустить демон rsyslogd:
root #
rc-service rsyslog start
Проверьте файл /var/log/messages на наличие записей syslog:
root #
tail -f /var/log/messages
2024-01-30T23:24:27.462647+01:00 server rsyslogd: [origin software="rsyslogd" swVersion="8.2212.0" x-pid="2404" x-info="https://www.rsyslog.com"] start
Шаблоны
Многие поставщики по-разному форматируют свои syslog-сообщения. Если сетевое оборудование логирует на центральный сервер rsyslog, разница в логировании будет легко заметна. После некоторого времени сбора журналов будет сложно фильтровать сообщения syslog-сервера по определенным параметрам:
- Дата
- Объект
- Критичность
- Хост
- Syslogtag
- ProcessID
- MessageType
- Сообщение
Чтобы унифицировать syslog-сообщения в определенный или предпочитаемый формат, Rsyslog использует шаблоны, которые разбирают входящие сообщения и "переписывают" их в желаемый формат.
Для поддержания простой и модульной конфигурации, шаблоны хранятся в директории /etc/rsyslog.d/. Чтобы включить файлы, хранящиеся в директории rsyslog.d, добавьте следующую строку в файл /etc/rsyslog.conf:
$IncludeConfig /etc/rsyslog.d/*.conf
Шаблоны должны быть сохранены в директории /etc/rsyslog.d/.
root #
cd /etc/rsyslog.d/
Следующие шаблоны работают очень хорошо, но не являются идеальными.
Вот простой шаблон для хоста Cisco IOS, который логирует в rsyslogd:
$template mysql_cisco, "insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg:R,ERE,1,DFLT:%[A-Z0-9_-]+: (.*)--end%', %syslogfacility%, '%fromhost%', %syslog
priority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%msg:R,ERE,0,DFLT:%[A-Z0-9_-]+:--end%')",SQL
Здесь простой шаблон для хоста ScreenOS, который логирует в rsyslogd:
$template mysql_netscreen, "insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg:R,ERE,1,DFLT:[a-zA-Z0-9-]+: (.*)--end%', %syslogfacility%, '%fromhost%', %s
yslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%msg:R,ERE,0,DFLT:[a-zA-Z0-9-]+:--end%')",SQL
Здесь простой шаблон для Linux-хоста, который логирует в rsyslogd:
$template mysql_linux, "insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, IntoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%HOSTNAME%', %syslogpriority%, '%timereported:::
date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag:R,ERE,1,FIELD:(.+)(\[[0-9]{1,5}\]).*--end%')" ,SQL
Настройте rsyslogd, какой предопределенный шаблон применять к какому объекту, добавьте следующие ссылки на шаблоны в конец файла /etc/rsyslog.conf:
- Все сообщения, поступающие на объект local4, являются сообщениями Cisco IOS:
local4.* :ommysql:localhost,Syslog,rsyslog-user,MySecretPassword;mysql_cisco
- Все сообщения, поступающие на объект local5, являются сообщениями ScreenOS:
local5.* :ommysql:localhost,Syslog,rsyslog-user,MySecretPassword;mysql_netscreen
- Все сообщения, поступающие на syslog, считаются Linux-сообщениями, и игнорируют объекты local4 и local5, у которых есть свои собственные шаблоны:
*.*;local4.none;local5.none :ommysql:localhost,Syslog,rsyslog-user,MySecretPassword;mysql_linux
Следующий пример показывает, как файл /etc/rsyslog.conf может выглядеть на syslog-сервере с работающими шаблонами:
$ModLoad imudp
$UDPServerRun 514
$ModLoad ommysql.so
$IncludeConfig /etc/rsyslog.d/*.conf
*.info;mail.none;authpriv.none;cron.none -/var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* -/var/log/cron
*.emerg *
uucp,news.crit -/var/log/spooler
local7.* /var/log/boot.log
local4.* :ommysql:localhost,Syslog,rsyslog-user,MySecretPassword;mysql_cisco
local5.* :ommysql:localhost,Syslog,rsyslog-user,MySecretPassword;mysql_netscreen
*.*;local4.none;local5.none :ommysql:localhost,Syslog,rsyslog-user,MySecretPassword;mysql_linux
Перезагрузите сервер rsyslog, чтобы применить новые изменения:
root #
/etc/init.d/rsyslog reload
Дополнительные примеры можно найти здесь.
Использование
Существует только один исполняемый файл, демон под названием rsyslogd.
Запуск
Параметры командной строки НЕ встроены в rsyslogd. Для этого выполните просмотр страницы руководства:
user $
man rsyslogd
[Вывод команды man rsyslogd]
Проверка конфигурационных файлов
Чтобы проверить синтаксис файлов конфигурации (/etc/rsyslog.conf) для rsyslogd, проверьте файл конфигурации, выполнив:
root #
rsyslogd -N1
rsyslogd: version 8.2302.0, config validation run (level 1), master config /etc/rsyslog.conf rsyslogd: End of config validation run. Bye.
Чтобы проверить конфигурационные файлы в тестовой среде без root-прав, выполните:
user $
/usr/sbin/rsyslogd -N1 -f /usr/share/doc/rsyslog/examples/rsyslog.d/console.conf
rsyslogd: version 8.2302.0, config validation run (level 1), master config /usr/share/doc/rsyslog/examples/rsyslog.d/console.conf rsyslogd: End of config validation run. Bye.
Удаление
Удаление пакета rsyslog (инструментария и библиотеки) можно выполнить, запустив:
root #
emerge --ask --depclean --verbose app-admin/rsyslog
Устранение проблем
Проверьте, запущен ли процесс syslog:
root #
ps ux | grep rsyslog
root 9161 0.0 0.0 1323652 3424 ? Sl 00:51 0:00 /usr/sbin/rsyslogd -c5 -i /var/run/rsyslogd.pid -f /etc/rsyslog.conf
Проверьте сетевую конфигурацию:
root #
ss -tulpn | grep rsyslog
udp UNCONN 0 0 0.0.0.0:514 0.0.0.0:* users:(("rsyslogd",pid=1710,fd=6)) udp UNCONN 0 0 0.0.0.0:514 0.0.0.0:* users:(("rsyslogd",pid=1710,fd=4)) udp UNCONN 0 0 [::]:514 [::]:* users:(("rsyslogd",pid=1710,fd=7)) udp UNCONN 0 0 [::]:514 [::]:* users:(("rsyslogd",pid=1710,fd=5))
Проверьте с помощью команды logger, поступают ли сообщения на syslog-сервер:
user $
logger -t test my syslog-test-message
Следующее сообщение должно появиться в файле /var/log/messages, если rsyslog работает правильно:
root #
tail /var/log/messages
... 2011-11-23T00:47:05+01:00 Rsyslogserver test: my syslog-test-message
См. также
- Metalog — an alternative syslog daemon.
- Sysklogd — utility that reads and logs messages to the system console, logs files, other machines and/or users as specified by its configuration file.
- Syslog-ng — a powerful, highly configurable monitoring and logging daemon.