Rsyslogrsyslog可以理解为增强版的syslog,在syslog的基础上扩展了很多其他功能,如数据库支持(Mysql,PostgreSQL、Oracle等)、日志内容筛选、定义日志格式模板等。除了默认的udp协议外,rsyslog还支持tcp协议来接收日志,可以yum安装,也可以源码安装,下载地址: http://www.rsyslog.com/download/
rsyslog功能很丰富,我只测了一部分,但这已经能够满足我的需求 a. mysql支持 rsyslog很多功能都是以模块的形式实现的,比如这个mysql支持,首先在编译的时候我们必须将这个模块编译进去,然后在/etc/rsyslog.conf加载”$ModLoad ommysql“,然后在指定哪些日志需要存放在数据里。在使用mysql模块前,我们需要手工建库、定义表,这些步骤手册里都有详细说明,操作起来也不难。 b. filter(日志筛选) filter是rsyslog的一大亮点,通常情况下,我们并不是所有的日志都要收集,比如我们只需要error以下级别的日志、或者我们再要包含特定内容的日志。灵活运用filter我们可以很轻易地实现这些需求。下面举几个例子,使用方法手册里有详细介绍:
如果日志内容包含”test_message”就存放在/var/log/test.log中,”&~”的意思是丢弃,不做后续处理。即使后面还有”:msg, contains,“test_message” /var/log/test2.log”,这条日志也不会再存在test2.log中。
上面的例子的另一种写法,用if的好处是可以定义一些复杂的条件匹配 c. template 使用template定义日志格式模板,可以规范不通的类型的日志,很方便我们查看,使用起来也很简单,但是template的定义必须放在rsyslog.conf的顶端。
第一行我们定义了一个名为myFormat的模板,第二行的意思是把我们定义的myFormat作为rsyslog的默认模板。如果只是需要在特定日志上套用这个模板可以这样写
用rsyslog的缘由:1.防止系统崩溃无法获取系统日志分享崩溃原因,用rsyslog可以把日志传输到远程的日志服务器上 2.使用rsyslog日志可以减轻系统压力,因为使用rsyslog可以有效减轻系统的磁盘IO 3.rsyslog使用tcp传输非常可靠,可以对日志进行过滤,提取出有效的日志,rsyslog是轻量级的日志软件,在大量日志写的情况下,系统负载基本上在0.1以下
安装与使用源码安装:一、安装前准备 1.下载rsyslog-5.6.2 2.准备两台机器(linux或者unix),一台客户端,一台服务端
服务端和客户端的安装步骤:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12. #产生服务文件 vi/etc/init.d/rsyslog
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99. 100. reload|force-reload) 101. reload 102. ;; 103. status) 104. rhstatus 105. ;; 106. condrestart) 107. [ -f /var/lock/subsys/rsyslog ] && restart || : 108. ;; 109. *) 110. echo $"Usage: $0 {start|stop|restart|reload|force-reload|condrestart}" 111. exit 2 112. esac 113. 114. exit $? #启动服务
1.
2.
3.
4.
5. #配置服务端 vi/etc/rsyslog.conf #在文件开始加上,同时确保514端口能够被客户端用tcp访问
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17. 配置客户端 vi/etc/rsyslog.conf #在文件开始加上
1.
2.
3.
4. 测试: 在客户端上执行 logger-p user.info "sdns_log 34334" 在服务端的/Application/sdns/log/目录里是否有日志产生 Yum安装服务端:192.168.12.98 Centos6.2 客户端:192.168.12.57 Centos5.5
服务端安装: 1. 安装rsyslog以及rsyslog-mysql接口支持: #yum install -y rsyslog rsyslog-mysql 2. 修改配置 #vim /etc/rsyslog.conf # if you experience problems, check # http://www.rsyslog.com/troubleshoot for assistance
# rsyslog v3: load input modules # If you do not load inputs, nothing happens! # You may need to set the module load path if modulesare not found.
$ModLoad immark # provides --MARK-- message capability $ModLoad imuxsock # provides support for local systemlogging (e.g. via logger command) $ModLoad imklog # kernel logging (formerly provided by rklogd)
# Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console
# Log anything (except mail) of level info or higher. # Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none
# The authpriv file has restricted access. authpriv.* /var/log/secure
# Log all the mail messages in one place. mail.* -/var/log/maillog
# Log cron stuff cron.* -/var/log/cron
# Everybody gets emergency messages *.emerg *
# Save news errors of level crit and higher in aspecial file. uucp,news.crit -/var/log/spooler
# Save boot messages also to boot.log local7.* /var/log/boot.log
# Remote Logging (we use TCP for reliable delivery) # An on-disk queue is created for this action. If theremote host is # down, messages are spooled to disk and sent when itis up again. #$WorkDirectory /rsyslog/spool # where to place spoolfiles #$ActionQueueFileName uniqName # unique name prefixfor spool files #$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) #$ActionQueueSaveOnShutdown on # save messages todisk on shutdown #$ActionQueueType LinkedList # run asynchronously #$ActionResumeRetryCount -1 # infinite retries if host is down # remote host is: name/ip:port, e.g. 192.168.0.1:514,port optional #*.* @@192.168.12.14:514
# ######### Receiving Messages from Remote Hosts########## # TCP Syslog Server: # provides TCP syslog reception and GSS-API (ifcompiled to support it) $ModLoad imtcp.so # load module $InputTCPServerRun 514 # start up TCP listener atport 514 #tcp接收连接数为500个 $InputTCPMaxSessions 500
# UDP Syslog Server: #$ModLoad imudp.so # provides UDP syslog reception #$UDPServerRun 514 # start a UDP syslog server atstandard port 514
##为信息加上日志时间 #$template logformat,"%TIMESTAMP:::date-mysql%%FROMHOST-IP%%msg%\n" ##定义的日志文件的名称,按照年月日 #$templateDynFile,"/Application/sdns/log/%$year%%$month%%$day%.log" ##把包含sdns_log标志的信息写到DynFile定义的日志文件里 #:rawmsg, contains, "sdns_log"?DynFile;logformat ##这个表示丢弃包含sdns_log标志的信息 #:rawmsg, contains, "sdns_log" ~
3. 开启接收远程信息: #vim /etc/sysconfig/rsyslog 修改成:SYSLOGD_OPTIONS=”-m0 –r”
4. 确保防火墙没有阻止 直接关闭防火墙 或者 iptables -I INPUT -p tcp -m state --state NEW -m tcp -dport514 -j ACCEPT
5. 关闭syslog #service syslog stop 6. 开启rsyslog #service rsyslog start
客户端安装: 1. 安装rsyslog #yum install -y rsyslog 2. 修改配置 #vim /etc/rsyslog.conf # Use traditional timestamp format $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# Provides kernel logging support (previously done byrklogd) $ModLoad imklog # Provides support for local system logging (e.g. vialogger command) $ModLoad imuxsock
# Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console
# Log anything (except mail) of level info or higher. # Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none
# The authpriv file has restricted access. authpriv.* /var/log/secure
# Log all the mail messages in one place. mail.* -/var/log/maillog
# Log cron stuff cron.* /var/log/cron
# Everybody gets emergency messages *.emerg *
# Save news errors of level crit and higher in aspecial file. uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log local7.* /var/log/boot.log
$ModLoad imtcp.so # load module $InputTCPServerRun 514 # start up TCP listener at port514
#把包含sdns_log的信息通过tcp发到192.168.1.2@@表示tcp #:rawmsg, contains, "sdns_log"@@192.168.1.2 #这个表示丢弃包含sdns_log标志的信息,防止这个信息写到本机的/var/log/message #:rawmsg, contains, "sdns_log" ~ # @@表示tcp @表示udp
*.*;mail.none;authpriv.none;cron.none authpriv.* @@192.168.12.98 *.emerg @@192.168.12.98
3. 关闭syslog #service syslog stop 4. 开启rsyslog #service rsyslog start
都配置好了,测试: 在客户端上执行: logger -p user.info "sdns_log34334" 到服务端去看/var/log/message (责任编辑:IT) |