Рубрики
syslog \ rsyslog \ zabbix

rsyslog \ фильтры \ источники \ прием \ отправка \ настройка

Приоритет:

Rsyslog фильтрует сообщения для дальнейшего управления. 
Используются следующие фильтры:
facility and priority (Источники и приоритеты) -> Фильтры свойств -> Фильтры основанные на выражениях

Категории источники:

auht/authpriv - сообщения процессов аутентификации;
cron - логи имеющие отношения к планировщику;
daemon - логи запущенных демонов (сервисов);
kernel - логи ядра;
mail - логи почты;
syslog - логи имеющике отношение к syslog и другим сервисам;
lpr - логи печати;
local0-local7 - выделенные для административных целей.

Приоритеты:

Priority (Приоритеты) - уровень приоритетности (важности) сообщений
emerg (0) - экстренные;
alert (1) - тревожные;
err (3) - ошибки;
warn (4) - предупреждения;
notice (5) - уведомления;
info (6) - информация;
debug (7) - наивысший уровень (отладка)

Примеры использования фильтров:

Все лог сообщения сгенерированные подсистемой ядра с любым уровнем важности записывать в файл /var/log/kernel.log
kern.* /var/kernel.log

Отбрасывает все лог сообщения и прекращает их обработку.
*.* ~

Фильтровать и записывать в файл все лог сообщения от источника "daemon" с уровнем важности "err"
daemon.err /var/log/error_daemo.log

Фильтры базирующиеся на свойствах:

Синтаксис
:property, [!]compare-operation, "value"

Операторы сравнения:
contains - проверяет содержится ли строка, представленная в значении, в свойстве;
isequal - проверяет значение и свойство, они должные быть полностью идентичны;
startswith - проверяет находится ли значение в "value" в начале свойства;
regex - сравнение с помощью регулярных выражений;
ereregex - использование расширенных регулярных выражений;
isempty - является ли свойство пустым (не имеющим значения).
Наиболее полезные типы свойств:

msg - тело сообщения;
hostname - имя хоста отправившего сообщение;
source - алиас hostname;
fromhost - имя хоста от которого было полученно сообщение (если имя удалось разрешить);
fromhost-ip - тоже самое, что и fromhost только всегда ip-адрес;
syslogtag - TAG сообщения;
programname - имя программы;
syslogfacility - источник лог сообщения в форме цифры;
syslogfacility-text - источник лог сообщения в текстовой форме;
syslogseverity - уровень важности в цифровом виде;
syslogseverity-text - уровень важности в текстовом виде;
pri - источник и приоритет в виде числа;
pri-text - источник и приоритет в текстовом формате;
timegenerated - время когда сообщение было полученно.

Примеры использования фильтров базирующиеся на свойствах:

Если в теле сообщения встречается данный текст "DHCPREQUEST(lxdbr0)", то записывать сообщение в файл /var/log/syslog
:msg, contains, "DHCPREQUEST(lxdbr0)" /var/log/syslog

Если ip-адрес [хоста от которого полученно сообщение "192.168.1.1", то записать сообщение в файл /var/log/router.log
:fromhost-ip, isequal, "192.168.1.1" /var/log/router.log

Если имя хоста содержит текст "ubuntu", то записать его в файл /var/log/ubuntu-servers.log
:fromhost, regex ".*ubuntu.*" /var/log/ubuntu-servers.log

Фильтры основанные на выражениях:

Синтаксис:
if EXPRESSION then ACTION else ACTION

Примеры:
Если facility равно "local1" и cообщение содержит "mysql" то записывать его в файл /var/log/db.log
if $syslogfacility-text == "local1" and $msg contains "mysql"
then  /var/log/db.log 

Если сообщение содержит в себе текст "666" то записать его в файл "/var/log/666.log", если нет содержит то записать в файл "/var/log/non_666.log"
if $msg contains "666" then { action(type="omfile" file="/var/log/666.log") } 
else { action(type="omfile" file="/var/log/non_666.log") }

Пример фильтра не пишем лог

#no logging
:msg, contains, "YOU_TEXT_MESSAGE_1" stop
:msg, contains, "YOU_TEXT_MESSAGE_2" stop
:msg, contains, "YOU_TEXT_MESSAGE_3" stop
:msg, contains, "YOU_TEXT_MESSAGE_4" stop

#sent log to loanalyzer 
*.* @@172.17.1.100

Шаблоны

Шаблоны можно использовать для динамической генерации имен лог файлов

Синтаксис:
$template имя_шаблона, опции

Примеры:

$template remote_logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
daemon.* ?remote_logs

Сначала задаем шаблон с именем "remote_logs" потом указываем что запись лог сообщений необходимо вести в файл "/var/log/%HOSTNAME%/%PROGRAMNAME%.log", 
где %HOSTNAME% и %PROGRAMNAME% это свойства, грубо говоря переменные, которые зависят от источника лог сообщений. 
Потом с помощью знака ? и имени шаблона указываем, привязываем шаблон к фильтру сообщений. 
Получаем, что сообщения с источником сервисов писать в лог файл с названием как у службы и находящийся в директории с именем как у соответствующего хоста.

Прием логов:

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

Для работы по протоколу UDP:
module(load="imudp")
input(type="imudp" port="514")

Для работы по протоколу TCP:
module(load="imtcp")
input(type="imtcp" port="514")

Возможно работа одновременного по обоим протоколам.
После перезапуска сервер сможет принимать логи от удаленных хостов и обрабатывать их согласно настроенным фильтрам.

Отправка логов на удаленный Rsyslog сервер:

Для отправки логов на другой сервер необходимо вместо лог файла указать конструкцию с @ или @@ и ip-адрес сервера и порт:

Отправлять все логи на 172.20.1.58 по протоколу UDP
*.* @172.20.1.58:514

Отправлять все логи на 172.20.1.58 по протоколу TCP
*.* @@172.20.1.58:514