rsyslog性能表现
2016-07-06 19:11
330 查看
syskolgd的缺点
虽说Sysklogd已经发展进30余年,但其性能在高负载下会有诸多问题,如:
Ø记录丢失
Syslog默认使用UDP514端口来接收远程主机发送过来的日志,当有大量的日志需要syslogd进程来处理时就会有所残缺。这是由于UDP并没有丢包检测、重传、速率控制等机制,因此当很高速率的去发送UDP包时,对端检测到丢包是必然的。
Ø记录缓慢,磁盘IO利用率较高进而导致CPU阻塞影响系统性能
当有大量的日志需要syslogd进程来处理时,syslogd进程会频繁请求磁盘IO,使磁盘利用率升高,进而导致CPU由于等待进程完成IO请求而发生阻塞,最终影响系统性能。
关于Rsyslog
Rsyslog可以理解为一个sysklogd的多线程增强版,其在sysklogd的基础上扩展了很多其他功能,如:数据库支持(Mysql、Oracle、PostgreSQL等)、日志内容筛选、定义日志格式模板等。除了默认的UDP协议外,Rsyslog还支持TCP协议来接受日志。可以对输出的文件进行自动压缩并支持多个TCP侦听以及性能方面的提升。使用Rsyslog可以有效减轻系统磁盘IO,并且其支持TCP传输非常可靠,可以对日志进行过滤,提取有效日志。况且Red
Hat从6.0开始已经选择了Rsyslog,自然是有它的道理的。如果我们自己没有研发能力,那么“跟随上游”,无疑是最明智的选择。
看图说话(磁盘TPS为200-300):
替换前(sysklogd):
替换后(rsyslog):
我的配置:
因为rsyslog是支持多进程启动的,我这里配置了两个配置文件分别启动rsyslog,用来分开本地日志和远程日志方便以后分析,提取不同地方的日志。
1.配置rsyslog.conf用于监听本地syslog日志:
...
#加载本地syslog模块
$ModLoadimuxsock
#加载kernel模块
$ModLoadimklog
#定义日志格式默认模板
$ActionFileDefaultTemplateRSYSLOG_TraditionalFileFormat
#Loganything(exceptmail)oflevelinfoorhigher.
#Don'tlogprivateauthenticationmessages!
*.info;mail.none;authpriv.none;cron.none-/var/log/messages
#Theauthprivfilehasrestrictedaccess.
authpriv.*/var/log/secure
#Logallthemailmessagesinoneplace.
mail.*-/var/log/maillog
#Logcronstuff
cron.*-/var/log/cron
#Everybodygetsemergencymessages
#*.emerg*
*.emerg:omusrmsg:*
#Savenewserrorsoflevelcritandhigherinaspecialfile.
uucp,news.crit-/var/log/spooler
#Savebootmessagesalsotoboot.log
local7.*/var/log/boot.log
...
注:action:'*'以后将会被rsyslog遗弃(与rsyslog语法有歧义),rsyslog将采用“:omusrmsg:*”的写法
2.配置rsyslog.udp.conf用于监听UDP远程syslog日志:
...
#加载udp侦听模块
$ModLoadimudp.so
#指定udp侦听端口
$UDPServerRun514
#定义日志格式
$templateNETCOOL,"%TIMESTAMP%%fromhost-ip%%syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
$ActionFileDefaultTemplateNETCOOL
#Logallthemessagesinoneplace.
*.*/var/log/ncolog
...
注:模板RSYSLOG_TraditionalFileFormat为rsyslog默认保留模板,官网对其的解释是:the
"oldstyle"defaultlogfileformatwithlow-precisiontimestamps,它的具体格式为:
$templateTraditionalFileFormat,"%TIMESTAMP%%HOSTNAME%%syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
其中:TraditionalFileFormat为模板名;“”之间的为模板内容,由一些变量构成,常用的有:msg消息主体、fromhost-ip来源IP等。这个模板貌似对H3C设备token4的解析存在一些问题,建议将%HOSTNAME%替换为%fromhost-ip%另行自定义模板
3.为了方便日后的维护,我们按照RedHat的风格编写Rsyslog的启动脚本:
虽说Sysklogd已经发展进30余年,但其性能在高负载下会有诸多问题,如:
Ø记录丢失
Syslog默认使用UDP514端口来接收远程主机发送过来的日志,当有大量的日志需要syslogd进程来处理时就会有所残缺。这是由于UDP并没有丢包检测、重传、速率控制等机制,因此当很高速率的去发送UDP包时,对端检测到丢包是必然的。
Ø记录缓慢,磁盘IO利用率较高进而导致CPU阻塞影响系统性能
当有大量的日志需要syslogd进程来处理时,syslogd进程会频繁请求磁盘IO,使磁盘利用率升高,进而导致CPU由于等待进程完成IO请求而发生阻塞,最终影响系统性能。
关于Rsyslog
Rsyslog可以理解为一个sysklogd的多线程增强版,其在sysklogd的基础上扩展了很多其他功能,如:数据库支持(Mysql、Oracle、PostgreSQL等)、日志内容筛选、定义日志格式模板等。除了默认的UDP协议外,Rsyslog还支持TCP协议来接受日志。可以对输出的文件进行自动压缩并支持多个TCP侦听以及性能方面的提升。使用Rsyslog可以有效减轻系统磁盘IO,并且其支持TCP传输非常可靠,可以对日志进行过滤,提取有效日志。况且Red
Hat从6.0开始已经选择了Rsyslog,自然是有它的道理的。如果我们自己没有研发能力,那么“跟随上游”,无疑是最明智的选择。
看图说话(磁盘TPS为200-300):
替换前(sysklogd):
替换后(rsyslog):
我的配置:
因为rsyslog是支持多进程启动的,我这里配置了两个配置文件分别启动rsyslog,用来分开本地日志和远程日志方便以后分析,提取不同地方的日志。
1.配置rsyslog.conf用于监听本地syslog日志:
...
#加载本地syslog模块
$ModLoadimuxsock
#加载kernel模块
$ModLoadimklog
#定义日志格式默认模板
$ActionFileDefaultTemplateRSYSLOG_TraditionalFileFormat
#Loganything(exceptmail)oflevelinfoorhigher.
#Don'tlogprivateauthenticationmessages!
*.info;mail.none;authpriv.none;cron.none-/var/log/messages
#Theauthprivfilehasrestrictedaccess.
authpriv.*/var/log/secure
#Logallthemailmessagesinoneplace.
mail.*-/var/log/maillog
#Logcronstuff
cron.*-/var/log/cron
#Everybodygetsemergencymessages
#*.emerg*
*.emerg:omusrmsg:*
#Savenewserrorsoflevelcritandhigherinaspecialfile.
uucp,news.crit-/var/log/spooler
#Savebootmessagesalsotoboot.log
local7.*/var/log/boot.log
...
注:action:'*'以后将会被rsyslog遗弃(与rsyslog语法有歧义),rsyslog将采用“:omusrmsg:*”的写法
2.配置rsyslog.udp.conf用于监听UDP远程syslog日志:
...
#加载udp侦听模块
$ModLoadimudp.so
#指定udp侦听端口
$UDPServerRun514
#定义日志格式
$templateNETCOOL,"%TIMESTAMP%%fromhost-ip%%syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
$ActionFileDefaultTemplateNETCOOL
#Logallthemessagesinoneplace.
*.*/var/log/ncolog
...
注:模板RSYSLOG_TraditionalFileFormat为rsyslog默认保留模板,官网对其的解释是:the
"oldstyle"defaultlogfileformatwithlow-precisiontimestamps,它的具体格式为:
$templateTraditionalFileFormat,"%TIMESTAMP%%HOSTNAME%%syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
其中:TraditionalFileFormat为模板名;“”之间的为模板内容,由一些变量构成,常用的有:msg消息主体、fromhost-ip来源IP等。这个模板貌似对H3C设备token4的解析存在一些问题,建议将%HOSTNAME%替换为%fromhost-ip%另行自定义模板
3.为了方便日后的维护,我们按照RedHat的风格编写Rsyslog的启动脚本:
01
#!/bin/bash
02
# chkconfig:23451288
03
#description:Moddedbyms2008on2013/02/16
04
05
#Sourcefunctionlibrary.
06
. /etc/init.d/functions
07
08
RETVAL=0
09
PIDFILE1=/var/run/rsyslogd.pid
10
PIDFILE2=/var/run/rsyslogd.udp.pid
11
CONFILE1=/etc/rsyslog.conf
12
CONFILE2=/etc/rsyslog.udp.conf
13
14
prog=rsyslog
15
exec
=/usr/
local
/sbin/rsyslogd
16
lockfile=/var/lock/subsys/$prog
17
18
#
Sourceconfig
19
if
[-f/etc/sysconfig/$prog];
then
20
. /etc/sysconfig/$prog
21
fi
22
23
start(){
24
[
-x$
exec
]||
exit
5
25
26
umask
077
27
28
echo
-nmce_markerquot;Starting
local
logger:"
29
#thisonelistensonthe"usual"
socket/dev/log
30
daemon --pidfile=
"$PIDFILE1"
$
exec
-x-f$CONFILE1-i
"$PIDFILE1"
31
RETVAL=$?
32
echo
33
[$RETVAL-
eq
0]&&
touch
$lockfile
34
#
thisonelistensonlytotheUDPport
35
sleep
1
36
[
$RETVAL-
eq
0]&&{
echo
-nmce_markerquot;Startingremotelogger:
";daemon--pidfile="
$PIDFILE2
"$exec-x-f$CONFILE2-i"
$PIDFILE2"; }
37
RETVAL=$?
38
echo
39
40
return
$RETVAL
41
}
42
stop() {
43
echo
-nmce_markerquot;Shuttingdown
local
logger:"
44
killproc
-p
"$PIDFILE1"
$
exec
45
RETVAL=$?
46
echo
47
[$RETVAL-
eq
0]&&{
echo
-nmce_markerquot;Shuttingdownremotelogger:
";killproc-p"
$PIDFILE2"$
exec
; }
48
RETVAL=$?
49
echo
50
[
$RETVAL-
eq
0]&&
rm
-f$lockfile
51
return
$RETVAL
52
}
53
rhstatus(){
54
status
-p
"$PIDFILE1"
-l$prog$
exec
55
status-p
"$PIDFILE2"
-l$prog$
exec
56
}
57
restart(){
58
stop
59
start
60
}
61
62
case
"$1"
in
63
start)
64
start
65
;;
66
stop)
67
stop
68
;;
69
restart)
70
restart
71
;;
72
reload)
73
exit
3
74
;;
75
force-reload)
76
restart
77
;;
78
status)
79
rhstatus
80
;;
81
condrestart|try-restart)
82
rhstatus
>/dev/null2>&1||
exit
0
83
restart
84
;;
85
*)
86
echo
mce_markerquot;Usage:$0{start|stop|restart|condrestart|try-restart|reload|force-reload|status}"
87
exit
3
88
esac
89
90
exit
$?
相关文章推荐
- 如何制作安卓项目gif效果图及其简单菜单munu的计算问题
- 创建ovs网桥
- Spring @Transactional事物配置无效原因
- Win10好用吗?简单几步改造让Windows 10更好用
- COCI2011/2012 Contest#1 F Solution
- 微信公众帐号开发教程第9篇-QQ表情的发送与接收
- java 二叉树(十)前九篇二叉树的综合测试
- Eclipse 的单步调试
- android 通知
- 数据结构之---树
- react调用原生iOS方法
- java集合的简要体系结构
- 2016SDAU课程练习四1006 Problem F
- Android之权限大全
- POJ 1742 Coins
- Android社交系统----代码结构
- [leetcode-354]Russian Doll Envelopes(java)
- Android事件总线otto学习笔记
- C# UDP NAT 打洞 代码示例
- FET335X 之序--确定要用飞凌的AM335X了