日志管理(5) rsyslog服务浅析

rsyslog是syslog的多线程增强版,现在Fedora、Ubuntu,、rhel6、centos6默认的日志系统都是rsyslog了。rsyslog主要用来收集系统产生的各种日志,日志默认放在/var/log/目录下。先简单看看配置文件,然后给几个实例也算是对rsyslog的一个更深入的理解吧。

1、配置文件解析 主配置文件/etc/rsyslog.conf配置文件中有很多内容, 但最主要的是指定需要记录哪些服务和需要记录服务什么等级的信息。
格式是:日志设备 [连接符号] 日志级别 日志处理方式(action)
a)、日志设备(可以理解为日志类型):

1
2
3
4
5
6
7
8
9
10
11
auth                  --pam产生的日志 
authpriv --ssh,ftp等登录信息的验证信息
cron --定时任务
kern --内核
lpr --打印
mail --邮件
mark(syslog) --rsyslog服务内部的信息,时间标识
news --新闻组
user --用户程序产生的相关信息
uucp --unix to unix copy, unix主机之间相关的通讯
local 1~7 --自定义的日志设备

b)、日志级别,从上到下,级别从高到低,记录的信息越来越少。

1
2
3
4
5
6
7
8
9
debug         --有调式信息的,日志信息最多 
info --一般信息的日志,最常用
notice --最具有重要性的普通条件的信息
warning --警告级别
err --错误级别,阻止某个功能或者模块不能正常工作的信息
crit --严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert --需要立刻修改的信息
emerg --内核崩溃等严重信息
none --什么都不记录

c)、连接符号,其中的xxx表示某一日志级别

1
2
3
4
.xxx      表示小于等于xxx级别的日志信息 
.=xxx 表示等于xxx级别的日志信息
.!xxx 表示在xxx之外的等级的日志信息
.* 所有等级的日志信息

d)、日志处理方式,意思就是将特定的日志做怎样的处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1. 记录到普通文件或设备文件:: 
/var/log/file.log #将日志记录到文件/var/log/file.log
/dev/pts/0 #将日志记录在设备/dev/pts/0

2. 转发到远程的日志服务器
@192.168.0.1 #使用UDP协议转发到192.168.0.1的514(默认)端口
@@192.168.0.1:10514 #使用TCP协议转发到192.168.0.1的10514端口,这是指定非默认端口10514,tcp的默认端口也是514

3. 发送给用户(需要在线才能收到)::
root #发给root用户
root,kadefor,up01 #使用,号分隔多个用户
* #*号表示所有在线用户

4. 忽略,丢弃::
~ # 忽略丢弃日志

5. 执行脚本::
^/tmp/test.sh #^号后跟可执行脚本或程序的绝对路径,这个可以用来触发报警动作。

举2个例子 将mail的所有级别的日志,记录到文件/var/log/maillog中,其中的符号”-“表示使用缓存模式

1
mail.*      -/var/log/maillog

将所有日志的所有级别的信息采用UDP协议送给远程服务器192.168.186.134一份

1
*.*   @192.168.186.134

2、用实例说话
a)、将所有服务器的系统日志送给远程日志服务器,远程服务器用来接收和集中所有服务器送来的系统日志。
采用UDP协议发送和接收,在远程服务器端配置文件/etc/rsyslog.conf开启下面两行

1
2
3
# Provides UDP syslog reception 
$ModLoad imudp
$UDPServerRun 514

客服端的配置文件/etc/rsyslog.conf最后新增加一行,用来将所有的日志信息发送给远程的服务器192.168.186.134

1
*.*   @192.168.186.134

每次更改配置文件后不要忘记重启rsyslog服务。
测试:重启某台服务器的rsyslog服务看看远程的服务器能不能收到日志

1
2
3
$ /etc/init.d/rsyslog restart 
关闭系统日志记录器: [确定]
启动系统日志记录器: [确定]

看远程的服务器已经收到了相应的日志,如果没有收到日志是不是防火墙挡住了,如果没有使用标准的端口还要看看是不是SELinux服务开启了。

1
2
3
4
5
6
$ tailf /var/log/messages 
... ... ...
Nov 13 14:32:50 syndic02 kernel: Kernel logging (proc) stopped.
Nov 13 14:32:50 syndic02 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1641" x-info="http://www.rsyslog.com"] exiting on signal 15.
Nov 13 14:32:50 syndic02 kernel: imklog 5.8.10, log source = /proc/kmsg started.
Nov 13 14:32:50 syndic02 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1657" x-info="http://www.rsyslog.com"] start

b)自定义设备,手动将日志送给rsyslog服务
先修改配置文件,新增自定义设备local0并将其info级别及其以下级别的日志记录到文件/var/log/test.log文件中

1
local0.info /var/log/test.log

修改配置文件后不要忘记重启rsyslog服务使其生效
然后我们用logger命令向设备local0送日志,总共发送了4次日志,前三次的级别都是info及其以下级别的日志,第四次是debug级别的日志。参数”-t”是将每次发送的日志信息打上自定义标签。

1
2
3
4
$ logger -p local0.info "hello world" 
$ logger -t "This is Test" -p local0.info "hello world"
$ logger -t "This is Test" -p local0.warning "hello world"
$ logger -t "This is Test" -p local0.debug "hello world"

结果是前三次都记录到了文件/var/log/test.log中,第四条由于超过info级别为debug级别故忽略了。

1
2
3
4
$ tailf /var/log/test.log 
Nov 13 14:41:27 syndic02 root: hello world
Nov 13 14:42:22 syndic02 This is Test: hello world
Nov 13 14:42:56 syndic02 This is Test: hello world

c、收集各台服务器的history记录,可以参考文章《日志管理(1) 审计并收集history记录》
关于rsyslog的简单介绍就这些了,其它用法如过滤、加载外部模块、收集MySQL程序日志等,有兴趣的可以继续深入。

----------------本文结束 感谢阅读----------------