【前言】
日志记录了系统每天发生的各种各样的事情,同时还可以监视系统中发生的事件,你可以通过他来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹,对运维管理人员来说日志就是他的第三只眼,对于预警、发现、解决系统问题都非常有帮助。下面我们就一同来了解Linux下的日志系统(rsyslog)与如何通过loganalyer来实现日志信息的webGUI展示。
【rsyslog的特性】
在CentOS6上通过rsyslog(日志系统)来管理记录日志,其具有如下特性:1、支持多线程;2、通过TCP,SSL,TLS,RELP协议传输日志;3、支持通过MySQL, PGSQL, Oracle等多种关系型数据库来存储;4、具备强大的过滤器,可实现过滤系统信息中的任意部分;5、支持自定义输出格式;6、很适用于企业级别日志记录需求。
【rsyslog的配置文件及其定义格式】
rsyslog的配置文件:/etc/rsyslog.conf(主配置文件,一般配置该文件即可);
/etc/rsyslog.d/*.conf (从配置文件,一般都不配置);
rsyslog配置文件的定义格式:facility(设施).(连接符号)priority(级别) Target(目标)
◆ facility:设施(日志设备),从功能或程序上对日志进行分类,并由专门的工具负责记录其日志,可以理解为日志类型。
设施 | 说明 | 设施 | 说明 | |
auth | 与认证相关的,例如pam产生的日志; | mark | 防护墙标记 | |
authpriv | 与认证授权相关的,例如ssh,ftp等登录信息的验证信息; | news | 新闻组 | |
cron | 与周期性计划任务相关的 | security | 安全相关 | |
daemon | 与守护进程相关的 | syslog | syslog自己的日志 | |
kern | 与内核相关的 | user | 与用户相关的 | |
lpr | 与打印子系统相关的 | 邮件 | ||
uucp | 早期unix与unix之间共享文件的协议 | local0~7 | 用户自定义 | |
指定设施时可以使用通配符: *: 所有 f1,f2,f3,...: 列表 !: 取反 |
◆ 连接符号
连接符号 | 说 明 |
.xxx | 表示大于等于xxx级别的信息 |
.=xxx | 表示等于xxx级别的信息 |
.!xxx | 表示在xxx之外的等级的信息 |
◆ facility:级别(日志级别),从上到下级别从低到高,记录的信息越来越少,详细的可以查看手册: man 3 syslog
日志级别 | 说明 | 级别值 |
debug | 调式信息,日志信息最多 | 7 |
info | 一般信息的日志,最常用 | 6 |
notice | 最具有重要性的普通条件的信息 | 5 |
warn,warning | 警告级别 | 4 |
err, error | 错误级别,阻止某个功能或者模块不能正常工作的信息 | 3 |
crit | 蓝色警戒,阻止整个系统或者整个软件不能正常工作的信息 | 2 |
alert | 橙色警戒,需要立刻修改的信息 | 1 |
emerg, panic | 红色警戒,内核崩溃等严重信息 | 0 |
指定级别时可以使用通配符: *: 所有级别 none: 没有任何级别(表示不记录日志信息) |
◆ Target:目标,指定如何存储日志。
文件路径:例如/var/log/messages ,当路径前面有“-”时,表示启用异步存储机制;
用户: * 表示当前系统上所有已登录的用户
日志服务器:@SERVER_IP
管道:|COMMAND
◆ 实例说明:
mail.info /var/log/maillog
# 比指定级别更高的所有级别,包括指定的级别本身,都记录;
mail.=info /var/log/maillog
# 明确指定级别;
mail.!info *
# 除了指定级别,以外的所有级别
*.info
# 所有facility的info级别
mail.*:
# mail的所有级别
mail,news.info:
#mail的info级别与比其更高的所有级别,news的info级别与比其更高的所有级别;
注意:同一行可以定义多个facility(设施).priority(级别),当定义的设施不同级别相同时用“,”来隔开(例:mail,news.info);当定义的级别不相同或设施不相同时,需用“;”隔开(例:*.info;mail.none;authpriv.none;cron.none)。
【启用日志服务器的功能】
[root@www ~]# vim /etc/rsyslog.conf #修改编辑rsyslog的主配置文件; #### MODULES #### $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imklog # provides kernel logging support (previously done by rklogd) #$ModLoad immark # provides --MARK-- message capability # Provides UDP syslog reception $ModLoad imudp #装载imudp模块; $UDPServerRun 514 #启动rsyslog服务时,使其监听在UDP的514号端口上; # Provides TCP syslog reception $ModLoad imtcp #装载imtcp模块; $InputTCPServerRun 514 #启动rsyslog服务时,使其监听在TCP的514号端口上; [root@www ~]# service rsyslog start #启动rsyslog服务; Starting system logger: [ OK ] [root@www ~]# netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 224 tcp 0 0 :::514 :::* LISTEN 2248/rsyslogd udp 0 0 0.0.0.0:514 0.0.0.0:* 2248/rsyslogd udp 0 0 :::514 :::* 224 #ok,可以看出TCP与UDP的514号端口都监听了起来,启动日志服务器的功能就是这么简单! #下面我在另一台主机(192.168.0.112)上添加一条规则,使其日志都记录到该日志服务器 #(192.168.0.111)上来。 [root@dns ~]# vim /etc/rsyslog.conf *.* @192.168.0.111 #编辑一条规则使0.112这台主机的所有日志都记录到0.111这台 # 日志服务器上去; [root@dns ~]# service rsyslog restart #重启rsyslog服务,载入新的配置文件; Shutting down system logger: [ OK ] Starting system logger: [ OK ] [root@dns ~]# yum remove zsh -y #卸载zsh; [root@dns ~]# tail -3 /var/log/messages #查看本机的日志,并没有记录我的卸载事件; Jun 10 03:45:56 dns kernel: hrtimer: interrupt took 5042794 ns Jun 10 04:13:53 dns kernel: Kernel logging (proc) stopped. Jun 10 04:13:53 dns rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1437" x-info="http://www.rsyslog.com"] exiting on signal 15. [root@www ~]# tail -3 /var/log/messages #现在我们在日志服务上来查看; Jun 18 23:07:13 www dbus: avc: received setenforce notice (enforcing=0) Jun 18 23:07:13 www dbus: avc: received setenforce notice (enforcing=0) Jun 10 04:18:57 dns yum[2315]: Erased: zsh #ok!就在这了,日志已经记录下来! #注意:我们配置日志服务器时,一定要记得配置好iptables或其他防火墙的规则,放行TCP与UDP的 #514号端口。这里为了快速的检验效果,我们可以先关闭iptables服务(service iptables stop) #与Slinux(getenforce 0)。
【使用MySQL服务器来存储日志】
1)安装配置好MySQL数据库服务;
[root@www ~]# yum install mysql-server -y
2)安装rsyslog与MySQL数据库实现通讯所需的rsyslog-mysql包;
[root@www ~]# yum install rsyslog-mysql -y
3)创建rsyslog依赖的数据库;
[root@www ~]# mysql -u root -p mysql> SOURC /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql #导入sql文件,创建数据库与表 mysql> SHOW DATABASES; #创建了Syslog数据库; +--------------------+ | Database | +--------------------+ | information_schema | | Syslog | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> use Syslog Database changed mysql> SHOW TABLES #在Syslog数据库下创建了两张表; -> ; +------------------------+ | Tables_in_Syslog | +------------------------+ | SystemEvents | | SystemEventsProperties | +------------------------+ 2 rows in set (0.00 sec) mysql> grant all on Syslog.* to test@localhost identified by '123456'; #增加一个新用户名 #为test@localhost,密码为'123456',且授权使其对Syslog这个数据库完全控制权限; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; #强制刷新数据库,载入设置; Query OK, 0 rows affected (0.00 sec)
4)配置rsyslog启用模块;
[root@www ~]# vim /etc/rsyslog.conf #修改编辑rsyslog的主配置文件; 在#### Modules #####中插入启用模块ommysql: $ModLoad ommysql 在####rules####段中定义记录日志信息于数据库中 *.* :ommysql:localhost,Syslog,test,123456 #说明:localhost表示本地主机,Syslog为数据库名,test为数据库用户,123456为该用户密码;
5)重启rsyslog,载入新配置;
[root@www ~]# service rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ]
至此,我的所有日志都会存储于MySQL数据库中。在下一篇博文中我们将继续衔接下去,搭建完成日志服务器(Rsyslog+MySQL+Loganalyer)。