У цій статті я опишу установку та налаштування переглядача логів LogAnalyzer, Rsyslog-клієнта, який відсилатиме всі логи на віддалений Rsyslog-сервер, котрий в свою чергу буде писати їх в базу MySQL.
LogAnalyzer - веб-переглядач логів, що збирає системний демон rsyslog/syslog-ng, тобто виступає зручним фронендом.
У якості ОС я обрав Ubuntu 12.04. Адреси серверів:
192.168.1.51 (loganalyzer-mysql.ip) - rsyslog-сервер, на цьому ж хосту також буде проінстальовано LogAnalyzer
192.168.1.50 (loganalyzer-mongo.ip) - rsyslog-клієнт, що відсилатиме логи на хост loganalyzer-mysql.ip
Налаштовуємо серверну частину, для чого додамо репозиторій від розробника Rsyslog:
# vim /etc/apt/sources.list
...
# 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 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>
Схоже, що логи пишуться, як і очікувалось.
Наразі налаштуємо прийом логів від будь-якого хосту. Для цього відредагуємо конфігураційний файл на сервері, тобто перевіримо чи не закоментовані рядки:
# 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
Відкриваємо лінку http://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 messagedetails", інакше будуть помітні значні графічні баги:
Наразі 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 і помічатись як помилки. Запис буде приблизно такий:
Feb 17 17:27:05 loganalyzer-mongo mongodb: Sun Feb 16 07:26:13 [clientcursormon] mem (MB) res:15 virt:624 mapped:0
І ось результуючий вигляд LogAnalyzer-а:
У якості бази зберігання логів можна використати інші варіанти. Ідеальним вибором може слугувати нереляційна база данних MongoDB, адже роботу з нею підтримує як LogAnalyzer, так і Rsyslog. Проте щодо підтримки MongoDB останнім у мене виникли певні труднощі: при компіляції всіх залежностей із сирців все прекрасно запрацювало, проте все завершується невдачею, якщо скористуватись бінарними пакетами із офіційних репозиторіїв.
Посилання:
Посилання:
Немає коментарів:
Дописати коментар