Как настроить хранилище MySQL для определенных совпадений входных данных rsyslog?

Как настроить хранилище MySQL для определенных совпадений входных данных rsyslog?

Я переношу различные логи из Heroku на сервер rsyslog Linux (Ubuntu) и начинаю понимать, что мне нужно сделать больше, чем я могу сделать, в плане работы с историями моих журналов.

Мне нужна возможность углубляться в прошлое на основе более гибких данных и более гибкого доступа, чем тот, который предоставляют стандартные файлы системного журнала.

Я думаю, что ведение журнала в mysql может быть правильным подходом, но как мне настроить его так, чтобы он вытягивал только определенные записи журнала в таблицу на основе идентифицированного? Например, я вижу длинную шестнадцатеричную строку, идентифицирующую каждую запись журнала из определенного экземпляра приложения Heroku. Я предполагаю, что я могу просто передать их в сокет mysql вместо ВСЕХ входных данных rsyslog в mysql...

Может ли кто-нибудь указать мне ресурс, который может провести меня через процесс настройки чего-то подобного или просто предоставить некоторые детали, которые могут помочь? У меня более 15 лет опыта работы с Unix, поэтому мне просто нужно немного подтолкнуть в правильном направлении, поскольку я на самом деле не проделал большой объем работы с демонами syslog ранее в плане объединения различных серверов в один.

Кроме того, мне были бы интересны любые инструменты просмотра журналов, которые могли бы сделать детализацию таких журналов более удобной для разработчиков.

решение1

Думаю, что-то из этого должно сработать. Во-первых, убедитесь, что в вашем файле rsyslog conf есть строка ниже, чтобы модуль вывода MySQL загружался:

$ModLoad ommysql

Затем отфильтруйте нужные вам данные следующим образом:

:msg, contains, "Heroku"     :ommysql:dbserver,dbname,dbuser,dbpass;heroku-template

Далее вам нужно создать шаблон для ваших данных, чтобы rsyslog знал, что и как вставлять в вашу базу данных. Вот пример шаблона, который записывает только дату и сообщение, и исключает вас, чтобы у вас была таблица только с двумя столбцами, dateи message.

$template heroku-template, "INSERT INTO herokulog(date,message) VALUES ('%timestamp','%msg')\r\n", SQL

Что-то вроде этого должно работать. Обратите внимание, что это было у меня на уме и не проверено вообще, но вы поняли идею. Более подробную информацию можно найти навеб-сайт rsyslog, например,доступные значения параметров шаблонаможет вас заинтересовать.

решение2

Я бы передал системный журнал в команду grep для извлечения нужных строк, а затем в скрипт awk для генерации хорошо отформатированного CSV-файла, после чего я бы загрузил сгенерированный CSV-файл в MySQL с помощью «LOAD DATA IN FILE».

Вы также можете проверить проект phpsyslog-ng:http://www.gdd.net/index.php/PHP-Syslog-NG

Связанный контент