Сергей Крутилин
Настраиваем хранение логов в базе данных MySQL
Не всегда есть возможность зайти на удалённый сервер для просмотра журналов системы или приложений. Иногда возникает необходимость делегировать другому сотруднику задачи мониторинга. А может, под рукой не оказалось средств для удалённого доступа? Этих проблем можно избежать при помощи средств, настройка которых будет описана в данной статье.
Для решения поставленных целей нам понадобится следующее ПО – rsyslog (http://www.rsyslog.com) и phpLogcon (http://www.phplogcon.com). Первое будет записывать различные события журналов в базу данных MySQL, второе – предоставлять веб-интерфейс для их просмотра.
Необходимые требования:
Примечание: все действия по установке ПО на *nix-сервере выполняем под пользователем root.
Установка rsyslog
Авторизуемся под учётной записью root на сервере с помощью консоли или используя ssh-клиент, удалённо (к примеру, putty – http://www.chiark.greenend.org.uk/~sgtatham/putty). Для работы с файлами на удалённом *nix-сервере можно использовать WinSCP (будет рассмотрена далее).
Загружаем последнюю стабильную версию (для порядка лучше создать директорию, в которой будут лежать все дистрибутивы, к примеру, это может быть /usr/Distr), после чего распаковываем полученный архив:
#mkdir /usr/Distr
# cd /usr/Distr/
#wget http://www.rsyslog.com/Downloads-req-viewsdownload-sid-1.phtml
# tar -zxf rsyslog-3.20.5
#cd rsyslog-3.20.5
Конфигурируем rsyslog (с поддержкой MySQL):
./configure CFLAGS="-I/usr/local/include/" LDFLAGS="-L/usr/local/lib" --enable-mysql
После чего выполняем:
#make
#make install
Создаём базу MySQL для rsyslog, используя файл createDB.sql. В нашем случае он находится в директории /usr/Distr/rsyslog-3.20.5/plugins/ommysql/. Также нам необходим пользователь баз данных samaglog с паролем samagpassword, который имеет все права на созданную базу данных с именем Syslog:
# /usr/local/bin/mysql --user=root --password=password < /usr/Distr/rsyslog-3.20.5/plugins/ommysql/createDB.sql
# /usr/local/bin/mysql --user=root --password=password
mysql>create user 'samaglog'@'localhost' identified by 'samagpassword';
mysql>GRANT ALL PRIVILEGES ON Syslog.* TO 'samaglog'@'localhost';
mysql>quit;
Модифицируем rsyslog.conf. По умолчанию он находится в директории /etc. Включаем поддержку MySQL:
$ModLoad ommysql.so
Синтаксис записи событий в определённый файл схож с системным. Для базы MySQL он будет следующим:
*.* >servername,dbname,user,password
Рассмотрим пример записи событий системы, связанных с безопасностью:
security.* >127.0.0.1,syslog,samaglog,samagpassword |
Запускаем демон rsyslogd со следующими параметрами:
rsyslogd -c3 -4 -f /etc/rsyslog.conf
где:
- c – обязательный параметр для определения совместимости со старыми версиями rsyslog,
- 4 – использование ipv4,
- f – путь к файлу конфигурации.
Дополнительную информацию о ключах запуска смотрите в документации по адресу http://wiki.rsyslog.com/index.php/Main_Page.
На этом установка rsyslog закончена, и мы переходим к phpLogcon.
Установка phpLogcon
Скачиваем последнюю стабильную версию phpLogcon и распаковываем её в новую директорию нашего веб-сервера:
# mkdir /var/www/samaglogs/ && cd /var/www/samaglogs/
# wget http://www.phplogcon.org/Downloads-req-getit-lid-54.phtml
# tar -zxf phplogcon-2.6.2.tar.gz
# cp -R phplogcon-2.6.2/src/* .
# rm -r phplogcon*
Создаём пустой файл конфигурации и устанавливаем необходимые разрешения:
# touch /var/www/samaglogs/config.php
# chmod 666 /var/www/samaglogs/config.php
Для запуска скрипта установки phpLogcon необходимо открыть в браузере следующий адрес: http://samag.local/samaglogs/install.php, где samag.local – это имя или IP-адрес вашего веб-сервера.
Следуя указаниям мастера, доходим до 7-го шага и в поле Source Type выбираем MySQL Native, как показано на рис. 1. Обращаю ваше внимание на то, что данные в поле Database Tablename чувствительны к регистру.

Рисунок 1. Настройка базы MySQL для phpLogcon
Если после установки возникнет ошибка:
No syslog records found - Error Details:
Could not find the configured table, maybe misspelled or the tablenames are case sensitive
|
Значит, вы неверно указали имя таблицы (вместо SystemEvents написали systemevents). В случае возникновения данной ошибки нужно исправить следующую строчку в файле /var/www/samaglogs/config.php:
$CFG['Sources']['Source1']['DBTableName'] = 'SystemEvents';
Практика
Рассмотрим пример использования нескольких экземпляров rsyslogd и phplogcon. Нам необходим мониторинг событий mail.* (почтового сервера).
Модифицируем в файле createDB.sql в /usr/Distr/rsyslog-3.20.5/plugins/ommysql две первые строчки:
CREATE DATABASE Maillog;
USE Maillog;
Остальное оставляем без изменений.
Аналогично установке rsyslog создаём базу и даём на неё все права пользователю samaglog:
# /usr/local/bin/mysql --user=root --password=password < /usr/Distr/rsyslog-3.20.5/plugins/ommysql/createDB.sql
# /usr/local/bin/mysql --user=root --password=password
mysql>GRANT ALL PRIVILEGES ON Maillog.* TO 'samaglog'@'localhost';
mysql>quit;
Копируем файл /etc/rsyslog.conf в /etc/rsyslogmail.conf. После перечисления модулей в файле /etc/rsyslogmail.conf оставляем лишь:
mail.* >127.0.0.1,maillog,samaglog,samagpassword
Запускаем rsyslogd со следующими ключами:
rsyslogd -c3 -4 -f /etc/ rsyslogmail.conf -i /var/run/samag.pid
где i – путь к pid-файлу, для второго экземпляра rsyslogd.
Копируем директорию /var/www/samaglogs/ в другую (к примеру, /var/www/samagmaillogs/).
Переходим в новую директорию и изменяем следующую строчку в конце файла config.php:
$CFG['Sources']['Source1']['DBName'] = 'maillog';
Получаем отдельный мониторинг по адресу http://samag.local/samagmaillogs, как показано на рис. 2.

Рисунок 2. Пример работы phpLogcon
Как видно из примера, просматривать журналы намного удобнее через веб-интерфейс. Можно задавать различные фильтры, выбирать тип отображаемых данных и просматривать графики. Также rsyslog можно использовать для консолидации журналов нескольких серверов или сетевых устройств. Один интерфейс просмотра всегда удобнее, чем несколько.
WinSCP
В заключение рассмотрим упомянутый выше инструмент – WinSCP (http://winscp.net/eng/docs/lang:ru). Это файл-менеджер, который работает по протоколу SFTP (http://en.wikipedia.org/wiki/SFTP).
При помощи WinSCP вы можете работать с удалённым сервером *nix посредством демона SSH. WinSCP имеет следующие возможности:
- графический интерфейс;
- интеграция с ОС Windows (drag&drop, поддержка схем URL, ярлыки);
- все основные файловые операции.
Остальное вы найдёте на официальном сайте проекта по адресу http://winscp.net/eng/docs/lang:ru#возможности_программы.
Для работы с WinSCP необходимо настроить сервис SSH. Раскомментируйте в файле /etc/ssh/sshd_config следующую строчку:
Subsystem sftp /usr/libexec/sftp-server
После чего перезапустите демон sshd, используя следующую команду:
kill -HUP $(cat /var/run/sshd.pid)
где /var/run/sshd.pid – путь к pid-файлу демона sshd.
Пример работы WinSCP показан на рис. 3.

Рисунок 3. Пример работы WinSCP
Заключение
Оптимизация повседневных задач упрощает вашу работу. Единая система мониторинга позволит избежать многих проблем. Грамотное использование средств администрирования, будь то скрипты или сторонне ПО, в большинстве своём принесут только пользу.
Большой каталог свободно распространяемого ПО вы найдёте по адресу http://sf.net.