0

我正在使用 syslog-ng 来解析我通过 csv-parser 接收到的一些日志。但是,我想使用 syslog-ng 中的“目标”选项来实现比传统插入更复杂的插入操作。目前,我从 syslog-ng conf 文件到 MYSQL 的目的地如下所示:

destination d_sql_test
{
sql(
type(mysql)
host('<host>') 
username('<user>')
password('<pass>')
database('<db_name>')
table('test')
columns('col1')
values('${val1}')
);
};

但是,这只是将 val1 的内容插入 col1 列。我希望能够指定我的插入“逻辑”,如this question中的示例所示。

我不确定在哪里实际执行此操作,以及 syslog-ng 是否支持它

4

1 回答 1

1

我认为如果你能以某种方式在 syslog-ng 中做出决定,你就可以做到这一点。

  • 您可以尝试使用in-list() 过滤器来检查用户名是否已在文件中列出。如果不是,您可以将日志发送到 mysql 目标,也可以发送到另一个目标(可能是 program() 目标),该目标更新包含用户列表的文件,并重新加载 syslog-ng 以更新 inlist 过滤器.
  • 您可以在 Python 中编写一个 syslog-ng 模板函数,以某种方式实现逻辑,例如,如果应该将宏发送到数据库,则在消息中将宏设置为 1。然后,您可以在带有 mysql 目标的日志路径中使用此宏的过滤器。
  • 或者,如果您可以编写一个在 Python 中完成工作的单独目标:Writing syslog-ng destinations in Python

此外,您可能希望在 syslog-ng 邮件列表上发布此问题,以便开发人员更容易注意到它。

于 2015-12-11T07:33:49.197 回答