Назад | Перейти на главную страницу

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

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

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

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

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

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

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

Я бы перенаправил системный журнал команде grep для извлечения нужных вам строк, затем сценарию awk для создания хорошо отформатированного файла csv, затем я бы вытащил сгенерированный файл csv в mysql, используя «ЗАГРУЗИТЬ ДАННЫЕ В ФАЙЛ»

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