Логирование одно из самых важных задач системного администрирования.В Линукс системах логи принято хранить в файлах, так называемых файлах логов.Файлы логов – это файлы ,которые хранят сообщения о событиях произошедших в системе и обычно используются системными администраторами для определения проблем произошедших на машине. Обычно все лог файлы хранятся в директории /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

Источник

0 0 голоси
Рейтинг статьи
Підписатися
Сповістити про

0 комментариев
Найновіше
Найстаріші Найбільше голосів
Зворотній зв'язок в режимі реального часу
Переглянути всі коментарі