Что означает ошибка конфигурации rsyslog
Ошибка конфигурации rsyslog возникает, когда демон логов rsyslogd не может корректно прочитать или применить настройки из своих конфигурационных файлов. Это приводит к тому, что служба либо не запускается совсем, либо работает некорректно — логи не записываются, теряются или обрабатываются неправильно.
Типичные сообщения об ошибке в логах systemd:
rsyslogd: error: could not load module 'imuxsock'...
rsyslogd: invalid PRI value...
rsyslogd: file '/etc/rsyslog.conf' has invalid line...
Ошибка может появиться при попытке запуска службы (systemctl start rsyslog), при перезагрузке системы или при динамической загрузке конфигурации через rsyslogd -f /path/to/config.
Причины возникновения
- Синтаксическая ошибка в конфигурационном файле — пропущены скобки, кавычки, используется неправильный оператор (например,
:вместо;), или неверно указан модуль. - Указание несуществующего модуля или файла — в конфиге есть строка
module(load="имя_модуля"), но такой модуль не установлен или путь к файлу неверный. - Неправильные права доступа — пользователь
syslog(под которым работает rsyslog) не имеет прав на чтение конфигурационных файлов или запись в целевые каталоги логов (например,/var/log). - Конфликт с другим демоном логов — например,
systemd-journaldможет захватывать сообщения, или другой syslog-демон (如syslog-ng) использует тот же сокет. - Повреждение конфигурационного файла — случайное удаление символов, неправильное копирование, или ошибки при редактировании через редактор с разными переводами строк.
- Несовместимость версий — конфигурация написана для старой версии rsyslog, но в системе установлена новая, где изменился синтаксис некоторых директив.
Способ 1: Проверка синтаксиса конфигурации
Самый быстрый способ выявить проблему — проверить синтаксис без запуска службы. Rsyslog предоставляет встроенную утилиту для валидации.
- Откройте терминал.
- Выполните команду:
Она проверит все конфигурационные файлы, указанные в основной конфигурации (обычноrsyslogd -N1/etc/rsyslog.confи файлы из/etc/rsyslog.d/). - Если синтаксис корректен, вы увидите:
Если есть ошибки, вывод покажет номер строки и файл, например:rsyslogd: End of config validation run. Donersyslogd: error: could not load module 'imuxsock'... (try loading it with module(load=\"imuxsock\")) [try https://www.rsyslog.com/e/2212 ] - Исправьте указанные ошибки в соответствующих файлах (обычно с помощью
sudo nano /etc/rsyslog.confилиsudo vim /etc/rsyslog.d/your-config.conf). - После исправлений повторно запустите проверку.
💡 Совет: Если проверка проходит, но rsyslog всё равно не запускается, проблема может быть в правах доступа или конфликте модулей. Переходите к следующим способам.
Способ 2: Анализ логов systemd для rsyslog
Если служба падает при запуске, systemd сохраняет её логи. Их можно просмотреть без запуска rsyslog.
- Проверьте статус службы:
Если служба неактивна, в выводе может быть краткое сообщение об ошибке.systemctl status rsyslog - Для детального просмотра используйте journalctl:
Ключjournalctl -u rsyslog -b --no-pager-bпоказывает логи с текущей загрузки,--no-pagerвыводит всё сразу. - Ищите строки, начинающиеся с
rsyslogd:илиrsyslog:. Частые ошибки:cannot open file— проблема с путями или правами.module does not exist— отсутствует модуль.syntax error— ошибка в конфиге.
- На основе сообщения исправьте конфигурацию или настройки системы (например, установите недостающий пакет:
apt-get install rsyslog-imuxsock).
Способ 3: Проверка и исправление прав доступа
Rsyslog работает под пользователем syslog (иногда rsyslog). Если этот пользователь не может читать конфиги или писать в каталоги логов, служба завершится с ошибкой.
- Убедитесь, что конфигурационные файлы доступны для чтения:
Права должны включатьls -l /etc/rsyslog.conf /etc/rsyslog.d/rдля группы или всех (например,-rw-r--r--). Если нет, исправьте:sudo chmod 644 /etc/rsyslog.conf sudo chmod 644 /etc/rsyslog.d/*.conf - Проверьте владельца каталога логов:
Владельцем должен бытьls -ld /var/logroot, а группа —admилиsyslog. Пользовательsyslogдолжен иметь права на запись (w). - Если нужно, измените группу для каталога:
Но будьте осторожны: изменение прав наsudo chgrp syslog /var/log sudo chmod g+w /var/log/var/logможет повлиять на другие службы. Лучше проверить права на конкретные файлы логов, которые создаёт rsyslog (например,/var/log/syslog).
Способ 4: Восстановление стандартной конфигурации
Если вы не можете найти ошибку или конфиг сильно повреждён, проще восстановить оригинальные файлы.
Для Debian/Ubuntu:
- Переустановите пакет rsyslog (сохранит ваши изменения в
/etc/rsyslog.conf? Нет, переустановка может перезаписать конфиг. Поэтому сначала сделайте резервную копию):
После переустановки сравните старый и новый конфиг, перенесите нужные настройки вручную.sudo cp /etc/rsyslog.conf /etc/rsyslog.conf.backup sudo apt-get install --reinstall rsyslog - Или скопируйте примеры из документации:
sudo cp /usr/share/doc/rsyslog/examples/rsyslog.conf /etc/rsyslog.conf
Для RHEL/CentOS:
sudo cp /etc/rsyslog.conf /etc/rsyslog.conf.backup
sudo yum reinstall rsyslog
Примечание: Восстановление стандартного конфига сбросит все ваши настройки. Используйте только если вы не помните, что меняли, или конфиг нечитаем.
Способ 5: Отключение конфликтующих модулей или демонов
Иногда rsyslog конфликтует с systemd-journald, который по умолчанию собирает логи в бинарный журнал. Rsyslog может пытаться читать из journald через модуль imjournal, но если настройки неверны, возникают ошибки.
- Проверьте, загружен ли модуль
imjournalв конфиге:grep -r "imjournal" /etc/rsyslog.conf /etc/rsyslog.d/ - Если вы не хотите использовать journald, закомментируйте строку:
И раскомментируйте классический модуль для сокетов:#module(load="imjournal")module(load="imuxsock") - Также убедитесь, что
systemd-journaldне слушает тот же сокет. Проверьте/etc/systemd/journald.conf:
Если нужно, перезапустите journald:Storage=volatilesudo systemctl restart systemd-journald. - Если вы хотите, чтобы rsyslog читал из journald, проверьте настройки модуля
imjournal(например,PollingInterval).
Профилактика
Чтобы избежать ошибок конфигурации rsyslog в будущем:
- Всегда проверяйте синтаксис перед применением конфигурации. Интегрируйте команду
rsyslogd -N1в ваш workflow. - Создавайте резервные копии перед редактированием:
sudo cp /etc/rsyslog.conf /etc/rsyslog.conf.$(date +%F). - Используйте тестовые среды для сложных изменений (например, виртуальные машины или контейнеры).
- Документируйте изменения — оставляйте комментарии в конфигах с описанием, что и почему добавлено.
- Избегайте ручного редактирования бинарных файлов или конфигов с непонятным содержимым.
- Следите за обновлениями rsyslog: при переходе на новую мажорную версию проверьте официальную документацию на предмет изменений в синтаксисе.
- Настраивайте мониторинг — добавьте проверку статуса службы rsyslog в ваши системы мониторинга (например, через
systemctl is-active rsyslog).
Эти шаги помогут поддерживать надёжное логирование в вашей Linux-системе и быстро выявлять проблемы.