4.14 Rsyslog

Rsyslog — это очень быстрый, расширяемый сервис для управления логами с огромным количеством возможностей. Среди его возможностей можно отметить поддержку фильтрации контента, а также передачу логов по сетям. Основные возможности:

  • Многопоточность;
  • TCP, SSL, TLS, RELP;
  • Поддержка MySQL, PostgreSQL, Oracle;
  • Фильтрация журналов;
  • Полностью настраиваемый формат вывода.

Все программы Linux ведут лог путем отправки сообщений об ошибках или своем состоянии с помощью сокета syslog или просто записывая все сообщения в файл, который будет находиться в каталоге /var/log/.

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

Например, ядро Linux определяет такие уровни логов, или как мы будем называть их ниже — приоритеты:

  • KERN_EMERG — система неработоспособна;
  • KERN_ALERT — нужно немедленно принять меры;
  • KERN_CRIT — критическая ошибка;
  • KERN_ERR — обычная ошибка;
  • KERN_WARNING — предупреждение;
  • KERN_NOTICE — замечание;
  • KERN_INFO — информационное сообщение;
  • KERN_DEBUG — сообщения отладки.

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

Все настройки Rsyslog находятся в файле /etc/rsyslog.conf и других конфигурационных файлах из /etc/rsyslog.d. Вы можете посмотреть существуют ли у вас эти файлы выполнив:

ls /etc/rsys*
rsyslog.conf rsyslog.d/

Основной конфигурационный файл — /etc/rsyslog.conf, в нем подключены все файлы из папки rsyslog.d с помощью директивы IncludeConfig в самом начале файла:

IncludeConfig /etc/rsyslog.d/*.conf

В этих файлах могут содержаться дополнительные настройки, например, аутентификация на Rsyslog сервере. В главном конфигурационном файле содержится очень много полезных настроек. Обычно он обеспечивает управление локальными логами по умолчанию, но для работы через сеть нужно добавить настройки.

Синтаксис конфигурационного файла очень прост:

$переменная значение

Все директивы начинаются со знака доллара, содержат имя переменной, а дальше связанное с ней значение. Так выглядит каждая строка конфигурационного файла. В его первой части размещены общие настройки программы и загрузка модулей. Во второй — ваши правила сортировки и фильтрации лог файлов.

ModLoad imuxsock # provides support for local system logging
$ModLoad imklog # provides kernel logging support
#$ModLoad immark # provides --MARK-- message capability
 
# provides UDP syslog reception
 
#$ModLoad imudp
#$UDPServerRun 514
 
# provides TCP syslog reception
 
#$ModLoad imtcp
#$InputTCPServerRun 514

В этом участке загружаются все необходимые модули программы. Существуют четыре типа модулей:

  • Модули ввода — можно рассматривать, как способ сбора информации из различных источников, начинаются с im;
  • Модули вывода — позволяют отправлять сообщения в файлы или по сети, или в базу данных, имя начинается на om;
  • Модули фильтрации — позволяют фильтровать сообщения по разным параметрам, начинаются с fm;
  • Модули парсинга — предоставляют расширенные возможности для синтаксического анализа сообщения, начинаются с pm.

Сначала загружается модуль imuxsock, который позволяет сервису получать сообщения из сокета, а второй imklog получает сообщения ядра. Следующим загружается модуль mark, который позволяет маркировать соединения, или же выводить сообщения о том, что syslog все еще работает. Например, вы можете попросить rsyslog выводить сообщения каждые 20 минут:

MarkMessagePeriod 1200

Дальше идут глобальные директивы:

ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

В этой строке мы указываем, что нужно использовать стандартный формат хранения времени, в секундах с 1970 года.

 

Дальше следует набор прав разрешений для файлов журналов, которые будут созданы в вашей системе:

FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022

После создания этих файлов их права можно менять, на те, которые вам нужны.

Выше была более общая настройка syslog, ну а теперь правила сортировки логов. Вот набор правил по умолчанию:

auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log

Каждое правило имеет свой синтаксис, сначала идет источник и приоритет, затем действие. Если источник и приоритет совпадают, сообщение отправляется в указанный файл. Например, мы можем отправить больше сообщений в лог системы linux /var/messages:

*.info;mail.none;authpriv.none;cron.none /var/log/messages

В этой строке мы выбираем все сообщения уровня info, кроме mail,authpriv и cron. Шаблон mail.none будет означать, что не нужно логировать ни один уровень сообщений. Соответственно конструкция *.info — значит логировать сообщения от всех источников, но только с уровнем info, *.* — это вообще все сообщения, со всеми уровнями.

Источник и приоритет нечувствительны к регистру. Также заметьте, что приоритеты уровней error, warn и panic больше не используются, так как считаются устаревшими. В целом, в качестве источников вы можете использовать:

  • auth;
  • authpriv;
  • cron;
  • daemon;
  • kern;
  • lpr;
  • mail;
  • mark;
  • news;
  • security (эквивалентно auth);
  • syslog;
  • user;
  • uucp;
  • local0 … local7;

А в качестве приоритетов вы можете применить:

  • emerg (раньше panic);
  • alert;
  • crit;
  • error (раньше err);
  • warn (раньше warning);
  • notice;
  • info;
  • debug.

Звездочки на любом месте означают все варианты. Для фильтрации логов могут использоваться не только источник и приоритет, но и более сложные выражения на основе условий и сравнений.

Вы можете выполнять фильтрацию сообщений с помощью такого синтаксиса:

:поле, сравнение, «значение» путь_к_файлу

В качестве операции сравнения вы можете использовать такие варианты:

  • contains — поле содержит указанное значение;
  • isequal — поле должно быть идентичным значению;
  • startswith — поле должно начинаться со значения;
  • regex — сравнивает поле с регулярным выражением.

Например, отфильтруем сообщения только от определенной программы:

:syslogtag, isequal, 'giomanager:' /var/log/giomanager.log
& stop

Кроме того, можно использовать более простой синтаксис, в виде выражения if. Вот основной синтаксис:

if $поле сравнение ‘значение’ then файл

Здесь используются те же самые компоненты, только выглядит немного проще. Например:

if $syslogtag == 'giomanager' then /var/log/giomanager.log

Отправить лог на удаленный сервер достаточно просто, для этого достаточно указать @ и ip адрес удаленной машины, на которой запущен rsyslog:

*.info;mail.none;authpriv.none;cron.none @xx.xx.xx.xx:514

Здесь 514 — это порт, на котором слушает rsyslog. Настройка rsyslog на прием логов заключается в запуске сервиса с модулями imtcp и imudp. Далее, все что нужно для того чтобы получить логи с определенной машины, отфильтровать их из общего потока с помощью фильтров:

if $fromhost-ip contains '192.168.1.10' then /var/log/proxyserver.log

Без фильтров, сообщения с разных машин будут писаться в один общий лог системы linux в зависимости от того как вы их распределите.

Если вы нашли ошибку, выделите текст и нажмите Ctrl+Enter.

Print Friendly, PDF & Email