【前言】

    日志记录了系统每天发生的各种各样的事情,同时还可以监视系统中发生的事件,你可以通过他来检查错误发生的原因,或者寻找受到***时***者留下的痕迹,对运维管理人员来说日志就是他的第三只眼,对于预警、发现、解决系统问题都非常有帮助。下面我们就一同来了解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与守护进程相关的
syslogsyslog自己的日志
kern与内核相关的
user与用户相关的
lpr与打印子系统相关的
mail邮件
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)。