syskolgd的缺点
虽说 Sysklogd 已经发展进30余年,但其性能在高负载下会有诸多问题,如:
Ø 记录丢失
Syslog 默认使用 UDP 514 端口来接收远程主机发送过来的日志,当有大量的日志需要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 模块
$ModLoad imuxsock
# 加载 kernel 模块
$ModLoad imklog
# 定义日志格式默认模板
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none -/var/log/messages
# 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 *
*.emerg :omusrmsg:*
# Save news errors of level crit and higher in a special file.
uucp,news.crit -/var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
...
注:action:'*' 以后将会被rsyslog遗弃(与rsyslog语法有歧义),rsyslog将采用“ :omusrmsg:*”的写法
2. 配置 rsyslog.udp.conf 用于监听UDP远程 syslog 日志:
...
# 加载 udp 侦听模块
$ModLoad imudp.so
# 指定 udp 侦听端口
$UDPServerRun 514
# 定义日志格式
$template NETCOOL,"%TIMESTAMP% %fromhost-ip% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
$ActionFileDefaultTemplate NETCOOL
# Log all the messages in one place.
*.* /var/log/ncolog
...
注:模板 RSYSLOG_TraditionalFileFormat 为rsyslog默认保留模板,官网对其的解释是:the "old style" default log file format with low-precision timestamps,它的具体格式为:
$template TraditionalFileFormat,"%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/bash02#
chkconfig: 2345 12 8803# description: Modded by ms2008 on 2013/02/1604 05# Source function library.06.
/etc/init.d/functions07 08RETVAL=009PIDFILE1=/var/run/rsyslogd.pid10PIDFILE2=/var/run/rsyslogd.udp.pid11CONFILE1=/etc/rsyslog.conf12CONFILE2=/etc/rsyslog.udp.conf13 14prog=rsyslog15exec=/usr/local/sbin/rsyslogd16lockfile=/var/lock/subsys/$prog17 18#
Source config19if
[ -f /etc/sysconfig/$prog ] ; then20 .
/etc/sysconfig/$prog21fi22 23start() {24 [
-x $exec
] || exit
525 26 umask
07727 28 echo
-n mce_markerquot;Starting local
logger: "29 # this one listens on the "usual"
socket /dev/log30 daemon
--pidfile="$PIDFILE1"
$exec
-x -f $CONFILE1 -i "$PIDFILE1"31 RETVAL=$?32 echo33 [ $RETVAL -eq
0 ] && touch
$lockfile34 #
this one listens only to the UDP port35 sleep
136 [
$RETVAL -eq
0 ] && { echo
-n mce_markerquot;Starting remote logger:
"; daemon --pidfile="$PIDFILE2" $exec -x -f $CONFILE2 -i "$PIDFILE2";
}37 RETVAL=$?38 echo39 40 return
$RETVAL41}42stop()
{43 echo
-n mce_markerquot;Shutting down local
logger: "44 killproc
-p "$PIDFILE1"
$exec45 RETVAL=$?46 echo47 [ $RETVAL -eq
0 ] && { echo
-n mce_markerquot;Shutting down remote logger:
"; killproc -p "$PIDFILE2" $exec;
}48 RETVAL=$?49 echo50 [
$RETVAL -eq
0 ] && rm
-f $lockfile51 return
$RETVAL52}53rhstatus() {54 status
-p "$PIDFILE1"
-l $prog $exec55 status -p
"$PIDFILE2"
-l $prog $exec56}57restart() {58 stop59 start60}61 62case
"$1"
in63 start)64 start65 ;;66 stop)67 stop68 ;;69 restart)70 restart71 ;;72 reload)73 exit
374 ;;75 force-reload)76 restart77 ;;78 status)79 rhstatus80 ;;81 condrestart|try-restart)82 rhstatus
>/dev/null 2>&1 || exit
083 restart84 ;;85 *)86 echo
mce_markerquot;Usage: $0 {start|stop|restart|condrestart|try-restart|reload|force-reload|status}"87 exit
388esac89 90exit
$?

2122

被折叠的 条评论
为什么被折叠?



