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, где разработчики заметят это легче.

Другие вопросы по тегам