如何为某些 rsyslog 输入匹配设置 mysql 存储?

如何为某些 rsyslog 输入匹配设置 mysql 存储?

我正在将各种日志从 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 就知道要将什么内容插入到数据库中以及如何插入。下面是一个示例模板,它仅记录日期和消息,并且要求您拥有一个只有两列的表,datemessage

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

类似这样的方法应该可以工作。请注意,这只是我的想法,没有经过任何测试,但你明白我的意思。更多详细信息可从以下网址找到rsyslog 网站,例如可用的模板参数值你可能会感兴趣。

答案2

我将 syslog 传输到 grep 命令以提取所需的行,然后传输到 awk 脚本以生成格式良好的 csv 文件,然后使用“LOAD DATA IN FILE”将生成的 csv 文件拉入 mysql

您还可以检查 phpsyslog-ng 项目:http://www.gdd.net/index.php/PHP-Syslog-NG

相关内容