...

воскресенье, 23 февраля 2014 г.

Настройка централизованного логирования с 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://ift.tt/1hbdIs5 precise/
deb-src http://ift.tt/1hbdIs5 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://ift.tt/1joQ6kq
# 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




Открываем ссылки http://ift.tt/1gYRNou (в моем случае 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сылки:

http://ift.tt/1joQ6RB

http://ift.tt/1gYRNF4

http://ift.tt/1gYROJc

http://ift.tt/1gYROJf

http://ift.tt/1joQ6kE

http://ift.tt/1nDG52X

http://ift.tt/1joQ6AY

http://ift.tt/1gYRNFd


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий