您的位置:首页 > 其它

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的启动脚本:

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

$?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: