MySQL запрашивает перед операцией вставки syslog-ng
Я использую syslog-ng для анализа некоторых журналов, которые я получаю через csv-parser. Тем не менее, я хочу выполнить операции вставки, которые немного сложнее, чем обычные операции вставки, используя опцию "destination" в syslog-ng. В настоящее время мое назначение в MYSQL из моего файла syslog-ng conf выглядит следующим образом:
destination d_sql_test
{
sql(
type(mysql)
host('<host>')
username('<user>')
password('<pass>')
database('<db_name>')
table('test')
columns('col1')
values('${val1}')
);
};
Однако это просто вставляет содержимое val1 в столбец col1. Я хочу иметь возможность указать мою "логику" вставки, как показано в примере в этом вопросе.
Я не уверен относительно того, где на самом деле это сделать, и если это даже поддерживается syslog-ng
1 ответ
Я думаю, что вы можете сделать это, если вы можете как-то принять решение в syslog-ng.
- Вы можете попробовать использовать фильтр in-list(), чтобы проверить, присутствует ли имя пользователя в файле. Если это не так, вы можете отправить журнал в место назначения mysql, а также в другое место назначения (возможно, назначение программы ()), которое обновляет файл, содержащий список пользователей, и перезагружает syslog-ng для обновления фильтра списка,
- Вы можете написать шаблонную функцию syslog-ng в Python, которая каким-то образом реализует логику и, например, устанавливает макрос в сообщение равным 1, если он должен быть отправлен в базу данных. Затем вы можете использовать фильтр для этого макроса в пути к журналу с назначением mysql.
- Или, если вы можете написать отдельный пункт назначения, который выполняет работу в Python: Написание пунктов назначения syslog-ng в Python
Кроме того, вы можете разместить этот вопрос на форуме syslog-ng или в списке рассылки syslog-ng, где разработчики заметят это легче.