Сбор логов по сети: знакомство с протоколом Syslog
Когда у вас работает десятки или сотни серверов, мониторинг каждого из них по отдельности становится невозможным. Решение — централизованный сбор логов с помощью протокола Syslog. В этой статье мы подробно разберем, как он работает и как его настроить.
Что такое Syslog?
Syslog — это стандартный протокол для передачи сообщений журнала системного уровня по сети. Он позволяет собирать логи с различных устройств и систем на одном центральном сервере. Это особенно важно для:
- Корпоративных сетей
- Распределенных систем
- Облачных инфраструктур
- Мониторинга безопасности
История Syslog
Протокол Syslog был разработан в 1980-х годах Эриком Алмквистом для BSD Unix. С тех пор он стал де-факто стандартом для передачи сообщений журнала в IP-сетях. В 2009 году был принят RFC 5424, который определяет современную версию протокола.
Архитектура Syslog
Система Syslog состоит из трех основных компонентов:
- Syslog-клиент (originator) — устройство или приложение, которое генерирует сообщения
- Syslog-сервер (collector) — получатель сообщений
- Сеть — канал передачи (обычно UDP или TCP)
Формат сообщения Syslog
Каждое сообщение Syslog состоит из трех частей:
PRI (Priority)
Содержит информацию о приоритете сообщения:
<PRI>
PRI вычисляется по формуле: facility * 8 + severity, где:
- facility — источник сообщения (0-23)
- severity — важность сообщения (0-7)
HEADER
Содержит: - TIMESTAMP — время события - HOSTNAME — имя хоста отправителя - APP-NAME — имя приложения - PROCID — ID процесса - MSGID — ID сообщения
MSG
Содержит: - STRUCTURED-DATA — структурированные параметры - MESSAGE — текст сообщения
Пример полного сообщения:
<34>1 2026-03-03T15:00:00.123Z myserver app 12345 ID47 [exampleSD@32473 iut="3" event="start"] Starting up...
Уровни важности (Severity)
Syslog определяет 8 уровней важности:
- 0 — Emergency (чрезвычайная ситуация)
- 1 — Alert (требуется немедленное вмешательство)
- 2 — Critical (критическая ошибка)
- 3 — Error (ошибка)
- 4 — Warning (предупреждение)
- 5 — Notice (обычное, но значимое событие)
- 6 — Informational (информационное сообщение)
- 7 — Debug (отладочное сообщение)
Facility коды
Facility определяют источник сообщения:
- 0 — kernel messages
- 1 — user-level messages
- 2 — mail system
- 3 — system daemons
- 4 — security/authorization messages
- 5 — messages generated internally by syslogd
- 6 — line printer subsystem
- 7 — network news subsystem
- 8 — UUCP subsystem
- 9 — clock daemon
- 10 — security/authorization messages
- 11 — FTP daemon
- 12 — NTP subsystem
- 13 — log audit
- 14 — log alert
- 15 — clock daemon
- 16-23 — local use facilities
Настройка Syslog-сервера
В Linux
rsyslog
Rsyslog — это улучшенная версия классического syslog. Установите его:
```bash
Ubuntu/Debian
sudo apt-get install rsyslog
CentOS/RHEL
sudo yum install rsyslog ```
Включите прием сетевых сообщений, отредактировав /etc/rsyslog.conf:
```
Включить модуль UDP
module(load="imudp") input(type="imudp" port="514")
Включить модуль TCP
module(load="imtcp") input(type="imtcp" port="514") ```
Создайте отдельный файл для сетевых сообщений: ```
Все сетевые сообщения в отдельный файл
. @remote-server-ip:514 ```
Перезапустите сервис:
bash
sudo systemctl restart rsyslog
syslog-ng
Альтернативный вариант:
bash
sudo apt-get install syslog-ng
Конфигурационный файл /etc/syslog-ng/syslog-ng.conf:
``` source s_network { udp(port(514)); tcp(port(514)); };
destination d_remote_logs { file("/var/log/remote/${FULLHOST}/messages.log"); };
log { source(s_network); destination(d_remote_logs); }; ```
В Windows
Windows не поддерживает Syslog из коробки, но есть несколько решений:
NXLog Community Edition
- Скачайте и установите NXLog
- Настройте конфигурационный файл
/conf/nxlog.conf:
``` Module im_udp Host 0.0.0.0 Port 514 Protocol udp ParseFormat syslog
Kiwi Syslog Server
Популярное коммерческое решение с графическим интерфейсом.
Настройка клиентов
Linux клиенты
Для отправки сообщений на удаленный сервер добавьте строку в /etc/rsyslog.conf:
```
Отправка всех сообщений на удаленный сервер
. @@remote-server-ip:514 ```
Для конкретных типов сообщений: ```
Только ошибки
*.err @@remote-server-ip:514
Только сообщения ядра
kern.* @@remote-server-ip:514 ```
Настройка приложений
Многие приложения могут отправлять логи через Syslog. Пример для Apache:
```
В файле конфигурации Apache
LogLevel warn ErrorLog "| /usr/bin/logger -t httpd -p local6.error" ```
Windows клиенты
Для отправки логов с Windows машин можно использовать:
- NXLog — отправка событий из Event Log
- SolarWinds Free Syslog Sender
- Custom PowerShell скрипты
Безопасность Syslog
Традиционный Syslog использует UDP без шифрования, что создает риски:
- Перехват сообщений
- Подделка источника
- Нарушение целостности данных
Для решения этих проблем:
- Используйте TCP вместо UDP
- Внедрите TLS шифрование (RFC 5425)
- Примените аутентификацию источника
- Используйте VPN для передачи логов
Практические рекомендации
Выбор подходящего решения
- Для небольших сетей: rsyslog или syslog-ng
- Для корпоративных сред: Splunk, ELK Stack, Graylog
- Для облака: облачные решения логирования
Мониторинг производительности
- Следите за объемом передаваемых данных
- Мониторьте загрузку сетевых интерфейсов
- Проверяйте производительность сервера логов
Архитектура высокой доступности
- Настройте несколько серверов логов
- Используйте балансировку нагрузки
- Реализуйте резервное копирование логов
Заключение
Syslog — мощный инструмент для централизованного сбора логов. Правильно настроив эту систему, вы сможете эффективно мониторить и анализировать события в вашей инфраструктуре. Не забывайте о безопасности и масштабируемости при планировании архитектуры системы логирования.