Linux 下异步日志实现,Linux日志:rsyslog及loganalyzer(一)

【前言】

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

你可能感兴趣的:(Linux,下异步日志实现)