rsyslog
rsyslog — это программное обеспечение с открытым исходным кодом для обработки и передачи журналов (логов) в операционных системах семейства Unix (включая Linux). Является преемником и более функциональной альтернативой стандартной службе syslogd, предоставляя расширенные возможности фильтрации, форматирования, маршрутизации и хранения сообщений. Rsyslog поддерживает модульную архитектуру, что позволяет подключать различные входные и выходные модули для работы с базами данных, сетевыми протоколами, шифрованием и другими системами.
История
Проект rsyslog был начат в 2004 году немецким разработчиком Райнером Герхадсом (Rainer Gerhards) с целью создания более современной и производительной замены для syslogd. Основной движущей силой стали растущие требования к системам журналирования: необходимость поддержки различных форматов сообщений, реляционных баз данных, шифрования при передаче и централизованного сбора логов с большого числа серверов.
Первая стабильная версия вышла в 2005 году. Со временем rsyslog вошёл в состав многих дистрибутивов Linux в качестве стандартной службы журналирования, заменив собой syslogd. В 2010-х годах, с ростом популярности systemd и его компонента journald, роль rsyslog в некоторых дистрибутивах изменилась: он стал часто использоваться в паре с journald, выступая в качестве инструмента для перенаправления логов из journald в файлы, базы данных или на удалённые серверы. Несмотря на конкуренцию, rsyslog остаётся широко распространённым и активно поддерживаемым проектом.
Архитектура и принцип работы
Rsyslog работает по модели «клиент-сервер», но может функционировать и как автономный обработчик логов на одной машине. Основные компоненты архитектуры:
- Входные модули (inputs): отвечают за приём сообщений из различных источников. Примеры: прослушивание сокетов (локальных и сетевых), чтение файлов, получение сообщений от journald, приём по протоколам UDP, TCP, RELP.
- Правила (rules): набор инструкций, определяющих, как обрабатывать каждое входящее сообщение. Правила включают в себя условия (фильтры) и действия (actions). Фильтры могут основываться на приоритете (facility/severity), содержании сообщения, имени хоста, программе-отправителе и других полях.
- Действия (actions): операции, выполняемые над сообщением, прошедшим фильтрацию. Основные действия: запись в файл, отправка на удалённый сервер, запись в базу данных (MySQL, PostgreSQL, MongoDB), отправка по электронной почте, выполнение внешней программы.
- Выходные модули (outputs): реализуют конкретные действия. Каждый выходной модуль отвечает за один тип цели (например,
omfileдля записи в файл,ommysqlдля записи в MySQL,omfwdдля пересылки по сети). - Очереди (queues): механизм буферизации сообщений, обеспечивающий надёжность и производительность. Rsyslog поддерживает несколько типов очередей (фиксированного размера, на основе связанного списка, на основе диска), которые позволяют обрабатывать сообщения асинхронно и предотвращать потерю данных при перегрузках или сбоях.
Конфигурация
Основной конфигурационный файл rsyslog обычно находится по пути /etc/rsyslog.conf или /etc/rsyslog.d/ (каталог с дополнительными файлами). Синтаксис конфигурации основан на строках, начинающихся с ключевых слов, и поддерживает несколько форматов:
- Традиционный формат syslog:
facility.severity action - Расширенный формат rsyslog:
if $msg contains 'error' then action - Современный формат RainerScript: более сложный и гибкий язык, поддерживающий переменные, функции, структуры данных и модули.
Пример простого правила на RainerScript: `` if $syslogfacility-text == 'kern' and $syslogseverity <= 'err' then { action(type="omfile" file="/var/log/kernel_errors.log") stop } `` Это правило отбирает сообщения от ядра (kern) с уровнем ошибки и выше (err, crit, alert, emerg) и записывает их в отдельный файл, после чего останавливает дальнейшую обработку этого сообщения (stop).
Возможности и модули
Rsyslog обладает обширной экосистемой модулей, разделяемых на три основные категории:
- Входные модули (
im): imuxsock— чтение из локального системного сокета.imudp— приём по UDP.imtcp— приём по TCP.imrelp— приём по протоколу RELP (Reliable Event Logging Protocol), обеспечивающему надёжную доставку.imjournal— чтение логов из systemd journald.imfile— мониторинг и чтение текстовых файлов (например, логов веб-сервера).- Выходные модули (
om): omfile— запись в файл.omfwd— пересылка на удалённый syslog-сервер.ommysql,ompgsql,ommongodb— запись в реляционные и документо-ориентированные базы данных.omelasticsearch— отправка в Elasticsearch.ommail— отправка по электронной почте.omprog— выполнение внешней программы с передачей сообщения в stdin.- Модули обработки (
pm): pmrfc3164— парсер для стандартного формата syslog (RFC 3164).pmrfc5424— парсер для расширенного формата syslog (RFC 5424).pmlastmsg— парсер для сообщений, завершающихся наlast message repeated N times.
Применение
Rsyslog используется в самых разных сценариях, где требуется централизованный сбор, обработка и анализ системных журналов:
- Централизованное журналирование: сбор логов с десятков и сотен серверов в единое хранилище (файловое, база данных, SIEM-система).
- Мониторинг и оповещение: настройка правил, которые при появлении определённых сообщений (ошибки диска, попытки взлома, сбои служб) отправляют уведомления администратору.
- Аудит безопасности: сбор и анализ логов безопасности (например, из
/var/log/auth.log) для выявления подозрительной активности. - Интеграция с системами анализа: передача логов в Elasticsearch, Logstash, Graylog, Splunk и другие системы для последующей визуализации и поиска.
- Замена стандартного syslogd: в дистрибутивах, где rsyslog является стандартной службой, он используется для ведения локальных логов в файлах
/var/log/.
Сравнение с другими системами
| Характеристика | rsyslog | syslog-ng | systemd-journald |
|---|---|---|---|
| Производительность | Высокая | Высокая | Очень высокая |
| Гибкость конфигурации | Очень высокая (RainerScript) | Высокая | Низкая (ограниченные фильтры) |
| Поддержка баз данных | Широкая (MySQL, PostgreSQL, MongoDB, Elasticsearch) | Широкая | Нет нативной |
| Надёжность доставки | Высокая (RELP, очереди на диске) | Высокая (TCP, TLS) | Высокая (на локальной машине) |
| Формат сообщений | RFC 3164, RFC 5424, структурированные | RFC 3164, RFC 5424, структурированные | Двоичный, структурированный (journald) |
| Интеграция с systemd | Через imjournal | Через модули | Нативная |
Безопасность
Rsyslog поддерживает несколько механизмов для обеспечения безопасности передачи и хранения логов:
- TLS/SSL: шифрование трафика между клиентом и сервером при использовании модулей
imtcpиomfwdс поддержкой TLS. - RELP: протокол, гарантирующий доставку сообщений без потерь, даже при временных сбоях сети.
- Аутентификация: возможность настройки взаимной аутентификации клиента и сервера по сертификатам.
- Контроль доступа: ограничение приёма сообщений только от определённых IP-адресов или сетей.
Критика
Основные замечания к rsyslog касаются сложности конфигурации, особенно при использовании RainerScript для нетривиальных сценариев. Документация, хотя и обширна, иногда считается запутанной. Кроме того, в некоторых дистрибутивах, где systemd-journald является основным инструментом, rsyslog может восприниматься как избыточная надстройка. Однако для задач централизованного сбора и сложной маршрутизации логов rsyslog остаётся одним из наиболее мощных и гибких решений.
Источники
- Официальная документация проекта rsyslog (rsyslog.com/doc)
- RFC 3164 — The BSD Syslog Protocol
- RFC 5424 — The Syslog Protocol
- Документация дистрибутивов Linux (Red Hat Enterprise Linux, Ubuntu, Debian) по настройке rsyslog
- Статьи и руководства на сайте DigitalOcean и других технических ресурсах
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →