使用mysql来存放rsyslog记录
2013-04-18 17:00:49 阿炯

本站赞助商链接,请多关照。 ---------------
为什么使用mysql来存放日志记录
使用mysql来存放系统rsyslog日志
后端存查日志支持的客户端多,MySQL就成为诸多选择中的首选
兼容系统已有的'syslog.conf'配置文件
可将消息过滤后再次转发
配置文件中可以写简单的逻辑判断 
有现成的前端web展示程序

---------------
安装及初始配置
Debian下需要安装具体包:rsyslog-mysql

# aptitude install rsyslog-mysql
# apt-get install rsyslog-mysql
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
将会安装下列额外的软件包:
  dbconfig-common mysql-client mysql-client-5.1 mysql-common
建议安装的软件包:
  mysql-server
下列【新】软件包将被安装:
  dbconfig-common mysql-client mysql-client-5.1 mysql-common rsyslog-mysql
升级了 0 个软件包,新安装了 5 个软件包,要卸载 0 个软件包,有 85 个软件包未被升级。
...
Creating config file /etc/dbconfig-common/config with new version
正在设置 mysql-common (5.1.66-0+squeeze1) ...
正在设置 mysql-client-5.1 (5.1.66-0+squeeze1) ...
正在设置 mysql-client (5.1.66-0+squeeze1) ...
正在设置 rsyslog-mysql (4.6.4-2) ...
dbconfig-common: writing config to /etc/dbconfig-common/rsyslog-mysql.conf

Creating config file /etc/dbconfig-common/rsyslog-mysql.conf with new version
Creating config file /etc/rsyslog.d/mysql.conf with new version
Reloading enhanced syslogd: rsyslogd.

登录进mysql服务器,创建初始的库表的连接用户。
mysql>create database if not exists syslog;
mysql>grant select,insert,update on syslog.* to loger@'192.168.18.%' identified by 'passlog';
mysql>use syslog;
mysql>\. /usr/share/dbconfig-common/data/rsyslog-mysql/install/mysql

会建立起两张表:SystemEvents、SystemEventsProperties,日志也记录在第一张表里。

查看表里已有的日志:
mysql>SELECT * from SystemEvents\G

Debian下有配置文件"/etc/dbconfig-common/rsyslog-mysql.conf",修改它的内容貌似不起作用。

---------------
配置rsyslog
a、在'/etc/rsyslog.conf'中载入支持模块(mysql),这里它独立位于'/etc/rsyslog.d/mysql.conf'文件中。 
$ModLoad ommysql
*.* :ommysql:192.168.18.100,syslog,loger,passlog

'ommysql'之后分别时:数据库服的地址,数据库名称,登录数据库的用户名,登录数据库的密码

b、修改'/etc/rsyslog.conf'中的段落,打开tcp/udp监听端口
# provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514

只需要打开其一即可,这样这台机器可以接受并记录其它机器通过网络发过来的日志记录。

c、修改相应的日志处理方式,如下面两行,将local7和user的日志写到mysql中,默认是将所有的日志写到数据库里。
local7.*  :ommysql:127.0.0.1,Syslog,rsyslog_write,password
user.*    :ommysql:127.0.0.1,Syslog,rsyslog_write,password

在确认到mysql的连接及授权无误后,重启'rsyslog'服务,登录新终端或执行命令,再通过查询数据库即可得知配置是否成功。

---------------
开启日志转发
要在需要日志记录到远程的服务器的配置文件添加如下的一行即可,就可以将需要记录的日志通过网络转发到日志服务器上,当然日志服务器上的端口要是可访问的。
*.* @@rsyslog.freeoa.net #tcp
*.* @rsyslog.freeoa.net #udp

Restart the rsyslog service. 
Test that you can reach the rsyslog server on port 514 by using telnet. 

---------------
简单调试
可使用指令'rsyslogd -d'(应先关闭系统的服务),这样会打出更多的处理过程,以帮助解决问题。

---------------
关于'rsyslog.conf'
配置文件/etc/rsyslog.conf中有很多内容,但最主要的是指定需要记录哪些服务和需要记录什么等级的信息。示例如下面:
A  *.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access. 
 authpriv.* /var/log/secure

# Log all the mail messages in one place. 
B mail.* -/var/log/maillog
# Log cron stuff 
cron.* /var/log/cron

# Everybody gets emergency messages 
C *.emerg *

# Save news errors of level crit and higher in a special file. 
D uucp,news.crit  /var/log/spooler

# Save boot messages also to boot.log 
local7.* /var/log/boot.log     

A:把所有大于info级别的信息都记录到/var/log/messages中,但不要记录mail,authpriv和cron服务产生的信息

B:把mail产生的信息都记录到/var/log/maillog中

C:把所有服务输出的大于emergy级别的信息显示给每个在线的人,通过wall工具

D:把uucp和news输出的大于crit级别的信息记录到/var/log/spooler中

信息的等级及其在配置文件中指定的方式
七种信息等级
 1)info
 2)notice
 3)warning或warn
 4)err或error
 5)crit
 6)alert
 7)emerg或panic:导致系统几乎要死机

信息等级的指定方式
1). xxx: 表示大于xxx级别的信息
2).=xxx:表示等于xxx级别的信息
3).!xxx:表示在xxx之外的等级的信息

更多关于系统日志,请参考文章尾部的文章链接。

---------------
日志的查看
除了直接从mysql中提供,需要更为直观的方法,比如像使用'phplogcon'这样的第三方软件。

---------------
参考连接:
认识linux rsyslog
Linux系统日志简介