Настройка централизованного логирования с LogAnalyzer и Rsyslog

от автора

Совсем недавно у меня возникла необходимость создать центральный лог-сервер с веб-интерфейсом и в этой статье я хотел бы поделиться опытом, возможно кому-то он будет полезен. Я опишу установку и настройку веб-просмотрщика логов 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:

... # Adiscon stable repository deb http://ubuntu.adiscon.com/v7-stable precise/ deb-src http://ubuntu.adiscon.com/v7-stable precise/ ... 

# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com AEF0CF8E # gpg --export --armor AEF0CF8E | sudo apt-key add -


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

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

# apt-get update # apt-get install rsyslog rsyslog-mysql mysql-server mysql-client

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

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

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

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

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

# vim /etc/rsyslog.d/mysql.conf  ### Configuration file for rsyslog-mysql ### Changes are preserved  $ModLoad ommysql *.* :ommysql:localhost,Syslog,rsyslog,p@ssw0rD

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

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

mysql> show databases; +--------------------+ | Database           | +--------------------+ | information_schema | | Syslog             | | mysql              | | performance_schema | | test               | +--------------------+  mysql> use Syslog;  mysql> show tables; +------------------------+ | Tables_in_Syslog       | +------------------------+ | SystemEvents           | | SystemEventsProperties | +------------------------+  mysql> select * from SystemEvents limit 2 \G *************************** 1. row ***************************                 ID: 1         CustomerID: NULL         ReceivedAt: 2014-02-11 04:22:52 DeviceReportedTime: 2014-02-11 04:22:52           Facility: 5           Priority: 6           FromHost: loganalyzer            Message:  [origin software="rsyslogd" swVersion="8.1.5" x-pid="11992" x-info="http://www.rsyslog.com"] start ...         InfoUnitID: 1          SysLogTag: rsyslogd:       EventLogType: NULL    GenericFileName: NULL           SystemID: NULL *************************** 2. row ***************************                 ID: 2         CustomerID: NULL         ReceivedAt: 2014-02-11 04:22:52 DeviceReportedTime: 2014-02-11 04:22:52           Facility: 5           Priority: 6           FromHost: loganalyzer            Message: rsyslogd's groupid changed to 103 ...         InfoUnitID: 1          SysLogTag: rsyslogd:       EventLogType: NULL    GenericFileName: NULL           SystemID: NULL 2 rows in set (0.00 sec)  mysql> 

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

# vim /etc/rsyslog.conf ... $ModLoad imudp $UDPServerRun 514  # provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514 ...

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

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

# aptitude install apache2 libapache2-mod-php5 php5-mysql php5-gd

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

# mkdir /tmp/loganalyzer # cd /tmp/loganalyzer # wget http://download.adiscon.com/loganalyzer/loganalyzer-3.6.5.tar.gz # tar zxvf loganalyzer-3.6.5.tar.gz # mkdir /var/www/loganalyzer # mv loganalyzer-3.6.5/src/* /var/www/loganalyzer # mv loganalyzer-3.6.5/contrib/* /var/www/loganalyzer  # chmod +x /var/www/loganalyzer/configure.sh /var/www/loganalyzer/secure.sh # ./configure.sh && ./secure.sh # chown -R www-data:www-data /var/www/loganalyzer

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

# cd /etc/apache2/sites-available # cp default loganalyzer.conf # vim loganalyzer.conf

<VirtualHost *:80>         ServerAdmin webmaster@localhost          ServerName loganalyzer-mysql.ip   #<<---insert your domainname here          DocumentRoot /var/www/loganalyzer  #<<---insert root directory of unpacked Loganalyzer         <Directory />                 Options FollowSymLinks                 AllowOverride None         </Directory>         <Directory /var/www/>                 Options Indexes FollowSymLinks MultiViews                 AllowOverride None                 Order allow,deny                 allow from all         </Directory>          ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/         <Directory "/usr/lib/cgi-bin">                 AllowOverride None                 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch                 Order allow,deny                 Allow from all         </Directory>          ErrorLog ${APACHE_LOG_DIR}/error.log          # Possible values include: debug, info, notice, warn, error, crit,         # alert, emerg.         LogLevel warn          CustomLog ${APACHE_LOG_DIR}/access.log combined      Alias /doc/ "/usr/share/doc/"     <Directory "/usr/share/doc/">         Options Indexes MultiViews FollowSymLinks         AllowOverride None         Order deny,allow         Deny from all         Allow from 127.0.0.0/255.0.0.0 ::1/128     </Directory>  </VirtualHost>

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

# a2ensite loganalyzer.conf # a2dissite 000-default # apachectl configtest # service apache2 restart

Открываем ссылки 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 и добавляем опцию:

# vim /etc/rsyslog.conf ... *.* @@192.168.1.51 ...

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

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

# vim /etc/rsyslog.d/mongo.conf $ModLoad imfile $InputFileName /var/log/mongodb/mongodb.log $InputFileTag mongodb: $InputFileStateFile stat-mongo-error $InputFileSeverity error $InputFileFacility daemon $InputRunFileMonitor error.* @@192.168.1.50

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

Feb 17 17:27:05 loganalyzer - mongo mongodb : Sun Feb 16 7:26:13 [ clientcursormon ] mem (MB ) res : 15 virt : 624 mapped : 0

И вот результирующий вид 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/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *