: | : |
‹ | › | |||||
Пн | Вт | Ср | Чт | Пт | Сб | Вс |
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
Спасибо. Все четко и доходчиво!