Syslog — стандарт и протокол для передачи и хранения системных сообщений в Unix-системах. Определяет формат сообщений, уровни важности (severity) и категории (facility). Большинство Linux-сервисов пишут логи через syslog-интерфейс.
Как работает
Процессы отправляют сообщения демону syslog (rsyslog, syslog-ng) через Unix-сокет /dev/log. Демон принимает, фильтрует по facility.severity и записывает в файлы. Правила маршрутизации задают: куда писать ядерные сообщения (kern.*), куда — сообщения аутентификации (auth.*), куда — всё остальное.
Syslog-сообщение содержит: priority (facility + severity), timestamp, hostname, имя программы, PID, текст. Формат RFC 5424 добавил структурированные данные в квадратных скобках.
Уровни важности (Severity)
| Код | Название | Описание |
|---|---|---|
| 0 | emerg | Система неработоспособна |
| 1 | alert | Требуется немедленное действие |
| 2 | crit | Критическое условие |
| 3 | err | Ошибка |
| 4 | warning | Предупреждение |
| 5 | notice | Нормальное, но значимое событие |
| 6 | info | Информационное |
| 7 | debug | Отладочные сообщения |
История
Syslog разработан Эриком Оллманом в 1980 году для Sendmail, затем распространился на все Unix-компоненты как универсальный механизм логирования. RFC 3164 (2001) документировал де-факто стандарт. RFC 5424 (2009) — современный формат с структурированными данными и Unicode. rsyslog (2004) добавил TCP-транспорт, TLS-шифрование, фильтрацию по регулярным выражениям и вывод в базы данных. syslog-ng (1998) — более гибкая альтернатива с богатым языком конфигурации.
Конфигурация rsyslog
# /etc/rsyslog.conf
# Все kernel-сообщения в kern.log
kern.* /var/log/kern.log
# Ошибки авторизации
auth,authpriv.* /var/log/auth.log
# Критические ошибки всех сервисов
*.crit /var/log/critical.log
# Форвардинг на удалённый log-сервер (TCP)
*.* @@log-server:514
# Форвардинг с TLS
*.* action(type="omfwd"
target="log-server"
port="6514"
protocol="tcp"
StreamDriver="gtls")
Syslog vs journald
systemd journald заменяет традиционный syslog на современных системах, но rsyslog часто работает параллельно: journald пишет бинарный журнал, rsyslog получает сообщения через journald-сокет и дублирует в текстовые файлы. Это обеспечивает совместимость со скриптами, работающими с /var/log/*. Централизованный log-сервер получает данные через rsyslog-форвардинг или Promtail/Filebeat.
На что обращать внимание
Традиционный syslog (UDP, порт 514) не шифрует трафик — не используйте для передачи логов через интернет. rsyslog поддерживает TLS через gtls-модуль. Ротацию лог-файлов настраивает logrotate: /etc/logrotate.d/rsyslog задаёт частоту, количество хранимых копий и метод сжатия. Без ротации /var/log/ переполнит диск на нагруженном сервере за несколько недель.
Практические сценарии
Форвардинг логов Nginx через rsyslog на централизованный log-сервер:
# /etc/rsyslog.d/nginx.conf
module(load="imfile" PollingInterval="10")
input(type="imfile"
File="/var/log/nginx/access.log"
Tag="nginx_access"
Severity="info")
*.* @@log-server:514
Анализ в реальном времени через journalctl с форвардингом в rsyslog: journalctl -f | logger -t journald — все journald-сообщения попадают в syslog-поток.