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

Thank you for reading this post, don't forget to subscribe!

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

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

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

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

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

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

Син­так­сис

Опе­ра­то­ры сравнения:

  • 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

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

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

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

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

Син­так­сис:

При­ме­ры:

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

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

Шаблоны

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

Син­так­сис:

При­ме­ры

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

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

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

Для рабо­ты по про­то­ко­лу UDP, рас­ком­мен­ти­ро­вать строки

Для рабо­ты по про­то­ко­лу TCP

Воз­мож­но рабо­та одно­вре­мен­но­го по обо­им протоколам.

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

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

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

Отправ­лять все логи на 172.20.1.58 по про­то­ко­лу UDP

Отправ­лять все логи на 172.20.1.58 по про­то­ко­лу TCP