Открыть сервис

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/.

Сравнение с другими системами

Характеристикаrsyslogsyslog-ngsystemd-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 →