LinuxНизкая

Освойте syslog в Linux: настройка, мониторинг и анализ логов

Этот гайд подробно объясняет архитектуру syslog, настройку демона rsyslog и работу с системными логами. Вы научитесь эффективно отслеживать события, диагностировать проблемы и настраивать ротацию логов в Linux.

Обновлено 15 февраля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 22.04+CentOS 8+Debian 11+Linux ядро 5.x+

Введение / Зачем это нужно

Syslog — это стандартный протокол для сбора и хранения системных логов в Unix-подобных операционных системах. Понимание syslog критически важно для системных администраторов и разработчиков: оно позволяет мониторить работу системы, диагностировать проблемы, отслеживать безопасность и анализировать производительность. В этом гайде вы изучите архитектуру syslog, научитесь настраивать демон rsyslog и работать с логами на практике. После выполнения вы сможете эффективно отслеживать события в Linux, настраивать логирование для своих приложений и поддерживать порядок в системных журналах.

Требования / Подготовка

Перед началом убедитесь, что у вас есть:

  • Доступ к Linux-системе (Ubuntu, CentOS, Debian или другой) с правами суперпользователя (sudo).
  • Установленный пакет rsyslog (в большинстве дистрибутивов он есть по умолчанию; если нет — установите по инструкции ниже).
  • Базовые знания работы в терминале и редактирования текстовых файлов (например, с помощью nano или vim).
  • Понимание основных команд Linux (например, ls, cat, grep).

Шаг 1: Архитектура syslog

Syslog состоит из нескольких ключевых компонентов, которые работают вместе для сбора, маршрутизации и хранения логов:

  • Демон syslog (например, rsyslog или syslog-ng): фоновый процесс, который принимает сообщения от приложений, ядра и сетевых источников, затем фильтрует и направляет их в указанные места (файлы, базы данных, удалённые серверы).
  • Конфигурационные файлы: определяют правила обработки сообщений. Основной файл — /etc/rsyslog.conf, а дополнительные конфигурации можно размещать в /etc/rsyslog.d/ (файлы с расширением .conf).
  • Уровни логирования: каждое сообщение имеет:
    • Facility (категория источника): например, auth (аутентификация), cron (задачи cron), local0local7 (пользовательские категории), kern (ядро).
    • Severity (уровень важности): от debug (отладка) до emerg (критическая ошибка). Порядок: debug, info, notice, warning, err, crit, alert, emerg.
  • Транспорт: syslog поддерживает передачу по сети (UDP/TCP, обычно порт 514) и локальное хранение в файлах.

💡 Совет: В современных дистрибутивах по умолчанию используется rsyslog — это быстрая и расширяемая реализация с поддержкой TLS, фильтрации и модулей. Для понимания основ достаточно её.

Шаг 2: Установка и запуск rsyslog

Хотя rsyslog часто предустановлен, проверьте его наличие и установите при необходимости.

Для Debian/Ubuntu:

sudo apt update
sudo apt install rsyslog

Для RHEL/CentOS (8+):

sudo dnf install rsyslog  # или sudo yum на более старых версиях

После установки запустите и включите демон в автозагрузку:

sudo systemctl enable --now rsyslog

Проверьте статус:

systemctl status rsyslog

Вы должны увидеть active (running). Если демон не запущен, выполните sudo systemctl start rsyslog.

Шаг 3: Основы конфигурации

Основной конфигурационный файл — /etc/rsyslog.conf. Откройте его для просмотра (например, sudo nano /etc/rsyslog.conf). Обратите внимание на следующие элементы:

  • Модули: в начале файла могут быть загружены модули (например, module(load="imuxsock") для поддержки локальных сокетов).
  • Глобальные директивы: такие как $FileOwner syslog, $FileGroup adm (владельцы лог-файлов).
  • Правила (селекторы и действия): строки вида:
    *.info;mail.none;authpriv.none;cron.none /var/log/messages
    
    Это правило означает: все сообщения с severity info и выше (из всех facility, кроме mail, authpriv, cron) записывать в файл /var/log/messages.

Синтаксис правила: <селектор> <действие>

  • Селектор: facility.severity (например, auth.err), можно использовать wildcards * (все facility) и комбинации через ;.
  • Действие: путь к файлу (начинается с /), удалённый сервер (@server для UDP, @@server для TCP), команда (через |), база данных и т.д.

⚠️ Важно: После любых изменений в конфигурации перезагрузите rsyslog: sudo systemctl restart rsyslog. Для проверки синтаксиса используйте sudo rsyslogd -N1 (тестовый запуск без фактического запуска).

Шаг 4: Создание собственного правила логирования

Допустим, вы хотите логировать сообщения от вашего приложения, которое использует facility local0, в отдельный файл /var/log/myapp.log.

  1. Создайте отдельный конфигурационный файл в /etc/rsyslog.d/ (рекомендуется для пользовательских правил, чтобы не изменять основной файл):
    sudo nano /etc/rsyslog.d/myapp.conf
    
  2. Добавьте строку:
    local0.* /var/log/myapp.log
    

    Это правило перенаправляет все сообщения с facility local0 (любого severity) в указанный файл.
  3. Создайте файл лога и установите корректные права (rsyslog обычно сам создаёт файл при первом обращении, но можно предварительно):
    sudo touch /var/log/myapp.log
    sudo chown syslog:adm /var/log/myapp.log  #владелец и группа могут отличаться (например, `root:syslog`)
    sudo chmod 640 /var/log/myapp.log
    
  4. Перезагрузите rsyslog:
    sudo systemctl restart rsyslog
    

Шаг 5: Тестирование с командой logger

Используйте утилиту logger для отправки тестовых сообщений в syslog. Она позволяет указать facility и severity.

Отправьте сообщение с facility local0 и severity info:

logger -p local0.info "Тестовое сообщение от моего приложения"

Проверьте, появилось ли оно в логе:

tail -f /var/log/myapp.log

Вы должны увидеть строку, похожую на:

Feb 15 10:30:00 hostname username: Тестовое сообщение от моего приложения

Если сообщение не появилось:

  • Убедитесь, что правило в myapp.conf корректно (без опечаток).
  • Проверьте, что rsyslog перезапущен.
  • Убедитесь, что ваше приложение действительно использует facility local0 (возможно, нужно настроить само приложение, например, в конфигурационном файле или коде).

Шаг 6: Просмотр, анализ и ротация логов

Просмотр и анализ логов

Для мониторинга и поиска в логах используйте:

  • tail: следить за последними строками в реальном времени.
    tail -f /var/log/myapp.log  # следить за вашим логом
    tail -f /var/log/syslog | grep "error"  # фильтровать по ключевому слову
    
  • grep: поиск по шаблону.
    grep "local0" /var/log/syslog
    
  • journalctl: если система использует systemd-journald, он может показывать как свои логи, так и те, что перенаправлены из rsyslog (если настроено).
    journalctl -u rsyslog -f  # следить за логами самого rsyslog
    journalctl -f | grep "local0"  # фильтровать по facility
    

💡 Совет: Для сложного анализа (статистика, графики) рассмотрите инструменты вроде awk, sed или системы ELK (Elasticsearch, Logstash, Kibana) или Graylog.

Ротация логов

С течением времени файлы логов могут вырасти до огромных размеров. Ротация автоматически архивирует старые логи и создаёт новые.

Rsyslog часто интегрируется с logrotate. Конфигурация для стандартных логов обычно в /etc/logrotate.d/rsyslog:

/var/log/syslog
/var/log/mail.log
/var/log/kern.log
/var/log/auth.log
{
    rotate 4
    weekly
    missingok
    notifempty
    compress
    delaycompress
    sharedscripts
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}

Ключевые параметры:

  • rotate 4: хранить 4 архивных файла (например, syslog.1, syslog.2.gz и т.д.).
  • weekly: ротация каждую неделю (можно daily, monthly).
  • compress: сжимать архивы gzip.
  • postrotate: скрипт после ротации, который уведомляет rsyslog о переименовании файлов (важно для корректного продолжения логирования).

Для вашего кастомного лога /var/log/myapp.log добавьте отдельный блок в тот же файл или создайте новый в /etc/logrotate.d/:

/var/log/myapp.log {
    rotate 12
    monthly
    compress
    delaycompress
    missingok
    notifempty
    create 640 syslog adm
}

Протестировать ротацию можно вручную:

sudo logrotate -f /etc/logrotate.conf  # принудительная ротация

Проверка результата

После выполнения всех шагов убедитесь, что настройка работает корректно:

  1. Демон rsyslog активен: systemctl is-active rsyslog должен вернуть active.
  2. Лог-файл существует и доступен: ls -l /var/log/myapp.log.
  3. Тестовое сообщение записывается: снова выполните logger -p local0.info "Ещё одно тестовое сообщение" и проверьте tail -f /var/log/myapp.log.
  4. Ротация настроена: проверьте конфигурацию logrotate (sudo cat /etc/logrotate.d/rsyslog и ваш файл) и убедитесь, что параметры соответствуют требованиям.
  5. Нет ошибок в логах rsyslog: grep -i error /var/log/syslog (или journalctl -u rsyslog).

Если все пункты выполнены, вы успешно настроили syslog для своего приложения и научились работать с системными логами.

Возможные проблемы

  • Ошибка доступа при записи в лог-файл: Убедитесь, что rsyslog имеет права на запись. Проверьте владельца и права файла (ls -l /var/log/myapp.log). Обычно файлы логов должны принадлежать группе adm или syslog и иметь права 640. Если файл создан вручную, используйте sudo chown syslog:adm /var/log/myapp.log и sudo chmod 640 /var/log/myapp.log.
  • Сообщения не попадают в лог: Проверьте синтаксис конфигурационного файла с помощью sudo rsyslogd -N1 (вывод покажет ошибки). Убедитесь, что facility local0 используется вашим приложением (иногда нужно явно указать в конфигурации приложения, например, local0 в syslog-настройках). Также проверьте, что правило загружено (файл в /etc/rsyslog.d/ имеет расширение .conf).
  • Конфликт с systemd-journald: Если journald настроен на хранение логов (Storage=persistent в /etc/systemd/journald.conf), он может перехватывать сообщения до rsyslog. Убедитесь, что в journald.conf установлено ForwardToSyslog=yes (по умолчанию часто yes). После изменений перезапустите journald: sudo systemctl restart systemd-journald.
  • Логи не ротируются: Проверьте, что конфигурация logrotate включает ваш файл (файл в /etc/logrotate.d/). Убедитесь, что скрипт postrotate корректно уведомляет rsyslog (путь /usr/lib/rsyslog/rsyslog-rotate может отличаться; на некоторых системах это /usr/sbin/rsyslog-rotate). Запустите sudo logrotate -d /etc/logrotate.conf для тестового прогона без применения.
  • Много ненужных сообщений в логах: Настройте более точные селекторы. Например, вместо local0.* используйте local0.warn для только предупреждений и ошибок. Или исключите ненужные facility через ; (как в примере с /var/log/messages).

Часто задаваемые вопросы

В чем разница между syslog и journald?
Как проверить, работает ли rsyslog?
Где хранятся логи syslog по умолчанию?
Как настроить ротацию логов для syslog?

Полезное

Понять архитектуру syslog
Установить и запустить rsyslog
Изучить базовую конфигурацию
Создать собственное правило логирования
Протестировать логирование
Настроить просмотр и анализ логов