System logs

2017-12-22 17:41:04 1047 0

Настройка 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

Совсем недавно у меня возникла необходимость создать центральный лог-сервер с веб-интерфейсом и в этой статье я хотел бы поделиться опытом, возможно кому-то он будет полезен. Я опишу установку и настройку веб-просмотрщика логов LogAnalyzer, Rsyslog-клиента, который будет отсылать все логи на удаленный Rsyslog-сервер, и последний, в свою очередь, будет писать их в базу MySQL.

В качестве ОС я выбрал Ubuntu 12.04.

Адреса тестовых вебнод:
192.168.1.51 (loganalyzer-mysql.ip) — Rsyslog-сервер, на этом хосте также будет проинсталлирован LogAnalyzer
192.168.1.50 (loganalyzer-mongo.ip) — Rsyslog-клиент, который будет отсылать логи на сервер loganalyzer-mysql.ip

Настраиваем серверную часть, для чего добавим репозиторий от разработчика Rsyslog:

Конечно, можно воспользоваться версией Rsyslog, что доступна в стандартных репозиториях, однако у меня имелась проблема с открытием 514 TCP-порта от имени пользователя syslog.

Обновляем пакеты и устанавливаем Rsyslog с дополнительными пакетами, которые в дальнейшем будут необходимы:

Как я уже сказал выше, будем настраивать запись логов в локальную MySQL базу. Также нужно будет ответить на некоторые вопросы в процессе установки. Пакет rsyslog-mysql во время конфигурации запросит создание пользователя и базы для хранения будущих логов:

Предварительно следует указать пароль для пользователя root базы данных. С его помощью будет залита структура базы rsyslog:

Указания пароля для отдельного пользователя rsyslog базы данных:

Если демону MySQL не существовало на хосте — то установщик также предложит создать пароль для пользователя root.

Конечный конфиг интеграции Rsyslog и MySQL выглядит следующим образом:

*. * — Запись всех логов в базу
ommysql — модуль, с помощью которого rsyslog будет писать в MySQL
Syslog — имя базы
rsyslog — пользователь, которому предоставлен доступ писать в базу Syslog
p@ssw0rD — пароль пользователя rsyslog

Перегружаем rsyslog и проверяем базу:

Похоже, что логи пишутся, как и ожидалось.
Теперь настроим прием логов от удаленного хоста. Для этого отредактируем конфигурационный файл на Rsyslog-сервере, т.е. проверим не закомментированы ли строки:

Перегружаем службу rsyslog. Таким образом 514-е порты UDP и TCP будут открыты для приема логов.

Переходим к настройке Loganalyzer.

Он будет установлен на ноду с IP 192.168.1.51, то есть на ноду с Rsyslog-сервером. В качестве веб-сервера используем Apache, поэтому установим его и пакеты необходимые для работы LogAnalyzer-а:

Скачиваем последний Loganalyzer, распаковываем его, ставим необходимые права на конфигурационные скрипты:

На момент публикации этой статьи последняя версия просмотрщика логов Loganalyzer — 3.6.5.
Создаем виртуальный хост, в котором следует не забыть, как минимум, изменить параметры ServerName и DocumentRoot:

Активируем виртуальный хост, проверяем конфигурационные файлы и перезагружаем Апач:

Открываем ссылки loganalyzer-mysql.ip/install.php (в моем случае loganalyzer-mysql.ip через /etc/hosts привязан к IP-адресу 192.168.1.51 ). Отвечаем на поставленные вопросы:

Проверка прав доступа к директориям:

Конфигурация пользователя для базы и некоторых дополнительных опций. Вписываем сюда значения из конфигурационного файла /etc/rsyslog.d/mysql.conf о котором я писал выше. Для этого может использоваться только база данных MySQL.

Проверка доступов к базе по предоставленному логину/паролю и заливка структуры таблиц, с которыми будет работать LogAnalyzer.

Создание администратора к web-интрерфейсу LogAnalyzer.

Добавляем источник логов для отображения. LogAnalyzer умеет показывать записи из текстового файла, базы данных MongoDB или MySQL. Описываем опции доступа к базе (все пишем в точности так как показано на скриншоте ниже, регистр также важен):

Все готово! Логинимось, используя логин/пароль.

Интерфейс LogAnalyzer-а выглядит следующим образом:

Пользователям браузера Chrome сразу посоветую убрать галочку «Use Popup to display the full message details», иначе будут заметны значительные графические баги:

Сейчас LogAnalyzer отражает логи только с одной хоста, то есть именно те​, что собирает rsyslog. Поэтому настраиваем отсылки логов с удаленного сервера, для чего редактируем конфиг rsyslog на хосте 192.168.1.50 и добавляем опцию:

*. * — описание всех логов по важности и программах, которые их пишет.
@@ — отсылать логи по TCP
@ — отсылать логи по UDP
192.168.1.51 — сервер, на который будут направлены логи.

Иногда возникает желание отсылать логи сервисов, которые не умеют писать в syslog. Потому может быть полезная подобная конфигурация:

Все что в директории /etc/rsyslog.d/ и с окончанием conf включается в основной конфиг /etc/rsyslog.conf. В данном случае будут отсылаться логи из текстового файла /var/log/mongodb/mongodb.log и помечаться как ошибки. Все что в файле /var/log/mongodb/mongodb.log будет отослано в общий syslog и иметь такой вид:

И вот результирующий вид LogAnalyzer-а:

В качестве базы хранения логов можно использовать и другие варианты. Идеальным выбором может служить нереляционная база данных MongoDB, ведь работу с ней поддерживает как LogAnalyzer, так и Rsyslog.

Cсылки:
www.k-max.name/linux/rsyslog-na-debian-nastrojka-servera/
rtfm.co.ua/debian-log-syslog-mysql-loganalyzer/
www.unixmen.com/install-and-configure-rsyslog-in-centos-6-4-rhel-6-4/
terraltech.com/syslog-server-with-rsyslog-and-loganalyzer/
rogovts.ru/opensource/rsysloganalyzer.html
lists.adiscon.net/pipermail/rsyslog/2013-March/031884.html
loganalyzer.adiscon.com/articles/using-mongodb-with-rsyslog-and-loganalyzer/
www.rsyslog.com/sending-messages-to-a-remote-syslog-server/

ссылка на оригинал статьи http://habrahabr.ru/post/213519/

Продолжая тему ведения журналов событий и отладки, поговорим про Syslog.

Это протокол передачи текстовых сообщений, прежде всего логов — сообщений о происходящих событиях, разработанный в 1980 году. Формат этого протокола очень прост и удобен, и практически не изменился за последние 35 лет.

Формат достаточно гибок, и предусматривает отправку как простых текстовых сообщений:

Use the BFG!

(но надо сказать что информативность в таких сообщениях практически отсутствует), так и более сложных, включающих в себя маркер уровня важности, метку времени и текстовый комментарий:

<13> Feb 5 17:32:18 10.0.0.9 Use the BFG!

Стандарт рассматривает также отправку ещё более сложных сообщений, в том числе со специальными указаниями для дальнейшей пересылки, но суть остаётся прежней — это всё то же текстовое сообщение не длиннее 1 килобайта, отправленное на порт 514 (UDP) / 6514 (UDP) или 601 (TCP) / 6514 (TCP).

Маркер важности

Очень важная фича, которая может помочь syslog-серверу правильно отреагировать на пришедшее сообщение — поместить его в нужную таблицу или запустить оповещение администратора системы, к примеру. Предусмотрены такие метки:

0 — Emergency, авария

1 — Alert, тревога

2 — Critical, критическая ошибка

3 — Error, ошибка

4 — Warning, предупреждение

5 — Notice, уведомление

6 — Info, информация

7 — Debug, отладка

Реализация

Таким образом, со стороны МК требуется лишь подключиться к Syslog-серверу (в случае TCP), нужным образом сформировать сообщение, и отправить его на сервер.

debug_socket.c:

debug_socket.h:

На сервере я обычно использую syslog-ng, он умеет складывать пришедшие сообщения в текстовый файл или в базу данных, а также проставлять сообщениям временнУю метку (Timestamp), что избавляет МК от необходимости знать точное время, да и уменьшает трафик. Впрочем я думаю, это умеют все syslog-серверы.

И у вас всегда остаётся возможность обойтись стандартными средствами: линукс прямо из коробки умеет складывать syslog-сообщения, пришедшие по UDP на порт 514, в /var/log.

Пример применения

Мои устройства имеют отладочную telnet-консоль, и чтение информации с неё было неудобным — нет архива старых сообщений, для отладки требуется одновременная работа двух человек (один воспроизводит глюк, другой записывает лог), ну и просто putty не очень удобен для этого.

Telnet-консоль была сделана как в статье, и мне было достаточно просто переписать этот макрос немного иначе — теперь он вызывает функцию отправки данных в UDP/514. Также я добавляю к сообщению MAC-адрес устройства и номер сообщения (чтобы отследить ситуацию пропажи сообщений).

На сервере работает скрипт на питоне, он разрезает сообщение и складывает принятое в БД.

На веб-интерфейсе сервера есть страница просмотра сообщений по приборам, с динамической подгрузкой AJAX-ом новых (в процессе появления) и более старых (при прокрутке списка) сообщений. Все отображаемые сообщения можно копировать для подробного анализа. Также есть разбиение по датам.

Объём записываемых данных достаточно велик — порядка 50 мегабайт/час с одного прибора, поэтому сделаны также средства logrotate: в конце дня данные за день архивируются, а архивы старше недели удаляются, потому что ошибки обычно принимаются в рассмотрение сразу после их появления.

В целом, можно подытожить что Syslog — простой и нетребовательный к ресурсам метод логирования событий, и если есть возможность — все события нужно не складировать на девайсе, а отправлять syslog-ом на компьютер, он большой и умный — разберётся

1. Установим rsyslog и настроим его на прием логов.

Установка:

apt-get install rsyslog

в файле /etc/rsyslog.conf раскомментируем/добавляем строчки:

# provides UDP syslog reception$ModLoad imudp $UDPServerRun514   # provides TCP syslog reception$ModLoad imtcp $InputTCPServerRun514   #Devices$template RemoteHost,"/var/log/devices/%HOSTNAME%/%HOSTNAME%.log"*.* ?RemoteHost

# provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 # provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514 #Devices $template RemoteHost,"/var/log/devices/%HOSTNAME%/%HOSTNAME%.log" *.* ?RemoteHost

и перезапустим rsyslog

service rsyslog restart

все готово для приема логов.

2.

Настройка отправки логов с linux серверов на централизованный сервер сборки логов.

Установка:

apt-get install rsyslog

в файл /etc/rsyslog.conf добавляем строчки

#Log All To Logserver*.*@10.10.10.10 *.*@@10.10.10.10

#Log All To Logserver *.* @10.10.10.10 *.* @@10.10.10.10

и перезапустим rsyslog

service rsyslog restart

пересылка логов началась на 10.10.10.10 🙂

3. Настройка отправки логов с коммутаторов и маршрутизаторов CISCO.

Задаем имя сервера на который нужно пересылать логи. В глобальной конфигурации пишем следующее:

logging 10.10.10.10

пересылка логов началась на 10.10.10.10

3. Настройка отправки логов с серверов Windows.

Пересылка логов осуществляется с помощью утилиты Evtsys — Eventlog to Syslog Utility.
Ищем.

Качаем. Перемещаем файлы evtsys.dll и evtsys.exe в %SystemRoot%\System32 (для Windows 2008 R2 путь будет %WinDir%\sysWOW64). Запустив консоль с правами администратора , переходим в каталог %SystemRoot%\System32 ( %WinDir%\sysWOW64) и набираем команду:

evtsys -i -h 10.10.10.10

Эта команда создает службу, которая будет отсылать лог-сообщения на syslog сервер.
Запускаем в консоли с правами администратора команду:

net start evtsys

для Windows Server 2008 R2
Заходим в реестр и меняем указанные ветки для параметра ImagePath:
Имя раздела: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\EvtSys;
Имя раздела: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\services\EvtSys;
Параметр: ImagePath
Тип: REG_EXPAND_SZ
Значение: %windir%\sysWOW64\evtsys.exe

Более подробно:
http://itexpertus.ru/windows/forward-event-windows-syslog.html

4. Настройка logrotate
Добавляем в файл /etc/logrotate.conf строчки:

/var/log/devices/*/*.log {size 1024M missingok rotate 300 compress delaycompress notifempty }

/var/log/devices/*/*.log { size 1024M missingok rotate 300 compress delaycompress notifempty }

Добавляем задание в cron:

00 1*** root logrotate /etc/logrotate.conf

00 1 * * * root logrotate /etc/logrotate.conf

Поздравляю, централизованный сборщик логов настроен!

Добавить комментарий

Закрыть меню