: :

ПнВтСрЧтПтСбВс

2017-12-22 17:41:04 19281 2

Настройка Rsyslog сервера

Логирование одно из самых важных задач системного администрирования.В Линукс системах логи принято хранить в файлах, так называемых файлах логов.Файлы логов - это файлы ,которые хранят сообщения о событиях произошедших в системе и обычно используются системными администраторами для определения проблем произошедших на машине. Обычно все лог файлы хранятся в директории /var/log. Там находятся несколько типов лог файлов хранящих различные сообщения, такие как файлы с системными событиями, файлы относищиеся к сообщения безопасности, пользовательские логи, логи планировщика и многие другие. Большинство лог файлов контролируется демоном rsyslog. Однако в новых дистрибутивах основанных на systemd, за логирование отвечает демон journald, который хранит логи в бинарном формате в оперативной памяти, хотя есть возможность сохраниния логов и на постоянной основе на жестком диске.

Мы будем рассматривать настройку и использование демона Rsyslog.

Rsyslog сервер может быть сконфигурирован в виде клиент-серверной модели, отправлять на другие сервера и получать с других удаленных серверов логи по сети по протоколам TCP и UDP. В качестве удаленных серверов могут использоваться не только Линукс машины, но и различные сетевые устройства, роктеры, свитчи и т.д. При этом Rsyslog может работать как сервер и как клиент одновременно. По-умолчанию используется порт - 514.

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) - наивысший уровень (отладка)

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

kern.* /var/kernel.log

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

*.* ~

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

daemon.err /var/log/error_daemo.log

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

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

Синтаксис

: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 - время когда сообщение было полученно.

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

:msg, contains, "DHCPREQUEST(lxdbr0)" /var/log/syslog

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

:fromhost-ip, isequal, "192.168.1.1" /var/log/router.log

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

:fromhost, regex ".*ubuntu.*" /var/log/ubuntu-servers.log

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

Вообщем можно создавать большое разнообразие различных фильтров, для обработки лог сообщений

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

Синтаксис:

if EXPRESSION then ACTION else ACTION

Примеры:

if $syslogfacility-text == "local1" and $msg contains "mysql"
then  /var/log/db.log 

Если facility равно "local1" и cообщение содержит "mysql" то записывать его в файл /var/log/db.log

if $msg contains "666" then { action(type="omfile" file="/var/log/666.log") } 
else { action(type="omfile" file="/var/log/non_666.log") }

Если сообщение содержит в себе текст "666" то записать его в файл "/var/log/666.log", если нет содержит то записать в файл "/var/log/non_666.log"

Шаблоны

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

Синтаксис:

$template имя_шаблона, опции

Примеры

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

daemon.* ?remote_logs

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

Цетрильный сервер Rsyslog

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






Введите ответ:

+

=



Андрей

2019-10-16 13:22:28

Цетрильный сервер Rsyslog - "Центральный" наверно имели ввиду.


alex0x

2018-07-27 13:53:07

Спасибо. Все четко и доходчиво!