Pull to refresh

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

Reading time 6 min
Views 107K


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

Все что в директории /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
Tags:
Hubs:
+18
Comments 71
Comments Comments 71

Articles