最近总有机器莫名的重启,内核日志中什么都没看出来,打算把syslog中kern开启debug模式,索性直接把Rsyslog server搞起来,看了一下CentOS6的rsyslog居然仍是5.8版本的,这都是2012-8月的版本了,新技术层出不穷,系统软件库更新太慢了。最新版的已是V8.18.0了,直接用新版本开搞。html
操做系统:CentOS release 6.7git
download yum repo file:rsyslogall.repo服务器
[rsyslog-v8-stable] name=Adiscon Rsyslog v8-stable for CentOS-$releasever-$basearch baseurl=http://rpms.adiscon.com/v8-stable/epel-$releasever/$basearch enabled=1 gpgcheck=0 protect=1
安装:ssh
yum clean all yum makecache yum install rsyslog
检查:socket
配置文件解析:async
Rsyslogd的配置文件是/etc/rsyslog.conf,通常在/etc目录下,先看看rsyslog client的配置:tcp
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html global(net.enableDNS = "on") global(net.ipprotocol = "ipv4-only") global(debug.onShutdown = "on") #max maxMessageSize 32K,default 8K $maxMessageSize 16K #### MODULES #### #提供本地系统日志记录,好比使用logger模拟发送日志 module(load="imuxsock") #提供内核级别的日志记录 module(load="imklog") #提供标记message的能力 #module(load"immark") # Provides UDP syslog reception #提供UDP的514端口来接收UDP协议发送过来的数据 module(load="imudp") input(type="imudp" port="514") # Provides TCP syslog reception #提供TCP的514端口来接收TCP协议发送过来的数据 #module(load="imtcp") #input(type="imtcp" port="514") #### GLOBAL DIRECTIVES #### #设置默认的timestamp格式 $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #文件同步功能默认被禁止了,通常状况下不须要这种功能 #$ActionFileEnableSync on # Include all config files in /etc/rsyslog.d/ $IncludeConfig /etc/rsyslog.d/*.conf #### RULES #### #记录全部的kernel日志到console. #kern.* /dev/console #记录全部事件日志级别大于info的日志到/var/log/message,可是mail、authpriv、cron的日志除外 *.info;mail.none;authpriv.none;cron.none /var/log/messages #authpriv相关的日志存放到/var/log/secure authpriv.* /var/log/secure #邮件相关的日志存放到/var/log/maillog mail.* /var/log/maillog #定时任务的日志存放到/var/log/cron cron.* /var/log/cron #全部级别大于emerg的信息,每一个人都会看到 *.emerg :omusrmsg:* #在一个特殊的文件里面保存crit或者级别更高的uucp日志 uucp,news.crit /var/log/spooler #记录启动信息到/var/log/boot.log local7.* /var/log/boot.log #全部日志发送到远程rsyslog服务器,@表示UDP协议,@@表示TCP协议 *.* @172.16.20.193:514 # ### begin forwarding rule ### # An on-disk queue is created for this action. If the remote host is # down, messages are spooled to disk and sent when it is up again. #$WorkDirectory /var/lib/rsyslog # where to place spool files #$ActionQueueFileName fwdRule1 # unique name prefix for spool files #$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown #$ActionQueueType LinkedList # run asynchronously #$ActionResumeRetryCount -1 # infinite retries if host is down # ### end of the forwarding rule ###
大部分的参数都已经解释了,下面主要看看RULES中日志格式的指定,通常是:日志类型(链接符号)日志级别 日志处理方式ide
日志类型:this
auth –pam产生的日志 authpriv –ssh,ftp等登陆信息的验证信息 cron –时间任务相关 kern –内核 lpr –打印 mail –邮件 mark(syslog)–rsyslog服务内部的信息,时间标识 news –新闻组 user –用户程序产生的相关信息 uucp –unix to unix copy, unix主机之间相关的通信 local 1~7 –自定义的日志设备
链接符号:url
.xxx: 表示大于等于xxx级别的信息 .=xxx:表示等于xxx级别的信息 .!xxx:表示在xxx以外的等级的信息
日志级别:
级别从低到高,记录的信息愈来愈少 debug –有调式信息的,日志信息最多 info –通常信息的日志,最经常使用 notice –最具备重要性的普通条件的信息 warning –警告级别 err –错误级别,阻止某个功能或者模块不能正常工做的信息 crit –严重级别,阻止整个系统或者整个软件不能正常工做的信息 alert –须要马上修改的信息 emerg –内核崩溃等严重信息 none –什么都不记录
处理方式:
/var/log/file 发送到日志文件 @@192.168.0.1 发送到TCP server @192.168.0.1 发送到UDP server user1,user2 发送到在线用户user1,user2 ~ 丢弃该日志 ^/path/script 执行的脚本,^后面跟能够执行的脚本,日志内容能够做为脚本的第一个参数,能够用来触发告警
上面就是Rsyslog client的基本配置,其中一些高级功能并无介绍,在下面的Rsyslog server中会作介绍。server的配置只须要在client上增长少量便可:
#$template TmplMsg, "/var/log/rsyslog_custom/%HOSTNAME%/%PROGRAMNAME%.log" template(name="FTM" type="string" string="/var/log/rsyslog_custom/%fromhost-ip%/%$YEAR%/%$MONTH%/%$DAY%/%PROGRAMNAME%.log") *.* ?FTM
增长的这一步就是为了分离各个client汇报上来的数据,存放在不一样的目录,使用到了模板技术,关于模板的官方解释看这里:template
Templates:容许你设置本身的格式,也能够用来生成动态文件,每个rsyslog的输出都会用到Templates,能够指定多个模板,不一样的日志输出到不一样的模板,若是没有指定Templates,则系统会使用默认的Templates,可使用老版本的配置语法$template,也可使用新版本的配置语法template(),官方建议仍是使用新语法。
$template:
语法格式:$template name,param[,options]
name是指定模板的名称,param是指定模板的内容
$template TmplMsg, "/var/log/rsyslog_custom/%HOSTNAME%/%PROGRAMNAME%.log"
TmplMsg就是模板名称,后面的是文件名称,中间“”之间的是内部变量,后面会介绍。
系统中有一些内置的保留模板,他们使用RSYSLOG_开头的模板名称,有以下:
RSYSLOG_TraditionalFileFormat
RSYSLOG_FileFormat
RSYSLOG_TraditionalForwardFormat
RSYSLOG_SysklogdFileFormat
RSYSLOG_ForwardFormat
RSYSLOG_SyslogProtocol23Format
RSYSLOG_DebugFormat
template():
语法格式 :基本的配置语法是template(parameters),还支持一种扩展的格式template(parameters) { list-descriptions }
template()用来定义templates,这是一个静态配置,parameter主要有两个参数:name和type。
name:指定模板的名称,必须是惟一的。
type:指定模板的类型,不一样的模板类型指定了不一样的模板指定方法,通常有list、subtree、string、plugin四中类型。
其中string类型的比较经常使用,咱们就以string为例:
template (name="tpl3" type="string" string="%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n") template (name="TraditionalFormat" type="string" string="%timegenerated% %HOSTNAME% %syslogtag%%msg%\\n") template (name="DynFile" type="string" string="/var/log/system-%HOSTNAME%.log")
上面%%之间的大写变量是能够替换的,:::后面跟的是一些属性。
Properties:
data items在rsyslog中叫作properties,通常用在templates(就是%%之间的变量)或者条件判断中。详细的看:Properties。主要有三种Properties:
Message Properties:
msg 匹配message中的msg部分 rawmsg 从socket收到的信息,通常用来debug rawmsg-after-pri 和rawmsg相似,可是syslog PRI被移除了 hostname message的主机名 source HOSTNAME的别名 fromhost message来源的主机名,通常是用在relay chain中 fromhost-ip 同fromhost,不过获取的是ip syslogtag message的tag programname 是tag的静态部分,例如tag是named[123456],则programname是named pri message的PRI,undecoded格式 pri-text text格式的PRI syslogfacility the facility from the message - in numerical form syslogfacility-text the facility from the message - in text form syslogseverity severity from the message - in numerical form syslogseverity-text severity from the message - in text form timegenerated timestamp when the message was RECEIVED. message被本地syslog接收到的时间 timereported timestamp from the message,包含message被建立的时间 timestamp alias for timereported
System Properties:
$bom The UTF-8 encoded Unicode byte-order mask (BOM) $myhostname The name of the current host as it knows itself
Time-Related System Properties:
$now 当前日期,格式YYYY-MM-DD,now是指当前message被处理的时间 $year 当前年份(4-digit) $month 当前月份(2-digit) $day 当前日期(2-digit) $hour 当前小时(24 hour) time (2-digit) $hhour From minute 0 to 29, this is always 0 while from 30 to 59 it is always 1. $minute 当前分钟(2-digit)
在配置文件的开头还有一些global设置,global的配置只能被设置一次,不能被随后从新设置:
action.reportSuspension on action.reportSuspensionContinuation off workDirectory dropMsgsWithMaliciousDNSPtrRecords localHostname preserveFQDN defaultNetstreamDriverCAFile defaultNetstreamDriverKeyFile defaultNetstreamDriverCertFile debug.gnutls 0 #rsyslog能够处理的单挑日志的大小,默认是4K,任何超出4K的都会被截断 maxMessageSize 4K #当被设置为on的时候,若是系统shutdown,rsyslog会记录系统的debug信息 debug.onShutdown on #指定debug日志的文件名称 debug.logFile #指定使用的协议,能够是ipv4-only,ipv6-only net.ipprotocol ipv4-only #是否解析主机名到ip地址 net.aclResolveHostname off #是否开启dns net.enableDNS on
UDP module:here
TCP Module:here
Config:here
下面附上生产中的配置:
#Client global(net.enableDNS = "on") global(net.ipprotocol = "ipv4-only") global(debug.onShutdown = "on") $maxMessageSize 16K module(load="imuxsock") # provides support for local system logging (e.g. via logger command) module(load="imklog") # provides kernel logging support (previously done by rklogd) $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $IncludeConfig /etc/rsyslog.d/*.conf kern.* /var/log/kern *.info;mail.none;authpriv.none;cron.none /var/log/messages auth.* /var/log/auth authpriv.* /var/log/secure mail.* /var/log/maillog cron.* /var/log/cron daemon.* /var/log/daemon user.* /var/log/user *.emerg ~ uucp,news.crit /var/log/spooler local7.* /var/log/boot *.* @192.168.1.6:514 #Server global(net.enableDNS = "on") global(net.ipprotocol = "ipv4-only") global(debug.onShutdown = "on") $maxMessageSize 16K $AllowedSender UDP, 127.0.0.1, 192.168.0.0/16 module(load="imuxsock") # provides support for local system logging (e.g. via logger command) module(load="imklog") # provides kernel logging support (previously done by rklogd) module(load="imudp") # needs to be done just once input(type="imudp" address="10.203.40.13" port="514") $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $IncludeConfig /etc/rsyslog.d/*.conf template(name="remote_syslog" type="string" string="/data0/rsyslog_center/%HOSTNAME%/%$YEAR%-%$MONTH%/%$DAY%/%PROGRAMNAME%.log") kern.* /var/log/kernel *.info;mail.none;authpriv.none;cron.none /var/log/messages auth.*;authpriv.* /var/log/secure mail.* /var/log/maillog cron.* /var/log/cron daemon.* /var/log/daemon user.* /var/log/user *.emerg :omusrmsg:* uucp,news.crit /var/log/spooler local7.* /var/log/boot *.* ?remote_syslog