четверг, 5 ноября 2015 г.

rsyslog: некоторые особенности настройки

Если надо в syslog писать из своей программы, казалось бы, выбрали любой local* (для примера выберём 0) и автоматом пишем в /etc/rsyslog.d/program что-то типа
local0.* /var/log/prog.log

Но эти сообщения будут попадать и в основной лог (messages, syslog). И красивое развёртывание начинает рассыпаться необходимостью править/заменять основной конфиг! В частности, в центос надо строку
*.info;mail.none;authpriv.none;cron.none                -/var/log/messages
заменить на
*.info;local0.none;mail.none;authpriv.none;cron.none                -/var/log/messages

Повторить по количеству нужных local секций.
Вариант - перейти на syslog-ng, у него фильтры более гибкие, хоть и более сложные. Впрочем, и тут можно опираться на имя программы, есть такая штука как Property-based и Expression-based Filters, например
if $programname == 'prog1' then {
   action(type="omfile" file="/var/log/prog1.log")
   ....
}

Далее, уровней всего 8, с 0 по 7, то есть опираясь чисто на local без пересечения мы можем запустить только 8 программ. Но теперь вспоминаем, что помимо нашего софта есть ещё много вспомогательного и системного, и копнув глубже, можно обнаружить что на все эти local есть свои претенденты, например
LOCAL0 is used by postgresql
LOCAL2 is used by sudo
LOCAL3 is used by some versions of SpamAssassin
LOCAL4 is used by default by slapd (OpenLDAP server)
LOCAL5 is sometimes used by the Snort IDS
LOCAL7 is used for boot messages on Fedora 12
centos 6 также использует 7 local для себя
local7.*                                                -/var/log/boot.log

В общем, протокол требует переработок, и прежде всего ухода с local на нормальные имена программ "из коробки". Сейчас его использование требует некоторых костылей, и дальше будет только хуже.

ЗЫ Что значит минус(тире) перед именем лога: не делать flush (сброс) записанных данных после каждой строки, но сейчас это и так не делается в большинстве дистрибутивов без допольнительной настройки.

ЗЫ2 отправить свою запись в лог, для теста: logger -p local7.info -t 'http-access'

Линки

Комментариев нет:

Отправить комментарий