出处:http://blog.163.com/bull_linux/blog/static/2138811422013101494729839/
rsyslog.conf是rsyslogd的主配置文件,rsyslogd是*nix系统上用来记录系统日志的。
rsyslog.conf向后兼容sysklogd的syslog.conf文件,所以可以直接使用syslog.conf文件
这个版本的rsyslog可以使用扩展的html格式文档,安装rsyslog-doc包查看高级特性,本man帮助只提供基础方面操作
=========================================
模块
rsyslog为模块化设计,模块数量在不断增长中,rsyslog-doc中查看完整描述
om: output module
im: input module
omsnmp SNMP trap输出模块
omgssapi 启用GSS的syslog输出模块
ommysql mysql输出模块
omrelp 可靠的RELP协议输出模块(防止信息丢失),用法:
*.* :omrelp:server:port
*.* :omrelp:192.168.0.1:2514 例子
ompgsql PostgreSQL的输出模块
omlibdbi 通用数据库输出模块(Firebird/Interbase, MS SQL, Sybase, SQLite, Ingres, Oracle, mSQL)
imfile 文本文件输入模块
imudp UDP syslog的输入插件,替代-r选项,用法:
$ModLoad imudp
$UDPServerRun 514
imtcp TCP syslog的明文输入插件,替代-t选项,用法:
$ModLoad imtcp
$InputTCPServerRun 514
imrelp RELP协议的输入插件,RELP可用于替代UDP或明文TCP syslog以提供可靠的syslog消息传递。
注意:明文TCP syslog不能提供真正的可靠性传递,因为连接问题和宕机会导致消息丢失。
RELP防止在这些情况下丢失信息。用法:
$ModLoad imrelp
$InputRELPServerRun 2514
imgssapi 启用GSS的syslog的明文TCP输入模块
immark mark信息支持
imklog 内核日志,要包含内核日志信息,需要:
$ModLoad imklog
注意:klogd守护进程已不再是必要的,因此也不再在rsyslog包中提供。
imuxsock Unix套接字,包括系统日志socket,用法:
$ModLoad imuxsock
为了从本地系统进程接收日志信息,这个配置指令必须在你明确知道自己在做什么时才能使用。
=========================================
基本结构
忽略#开头的和空行,rsyslog.conf中包括以下几部分
全局指令
全局指令设置整个rsyslog守护进程的一些全局属性,例如主信息队列大小($MainMessageQueueSize),
加载外部模块($ModLoad)等等,所有的全局指令需要自己一行以$符开头。
完整的全局指令列表可在html文档中或在线网站上找到。
模板 TEMPLATES
模板允许你指定日志信息的格式,同样用于生成动态文件名。它们被用于规则中之前要先定义,
查看下面TEMPLATES部分获得更多信息。
输出频道 OUTPUT CHANNELS
输出频道为用户可能想要的输出类型提供了保护,在规则中使用前要先定义,查看下面OUTPUT CHANNELS部分
规则(选择器+动作)
每个规则行由两部分组成,selector部分和action部分,这两部分由一个或多个空格或tab分隔,
selector部分指定设施样式(日志设备local0之类),日志优先级(等级)由action部分指定
-----------------------------------------
选择器 SELECTORS
selector也由两部分组成,设施和优先级,由点号.分隔,两部分都是大小写不敏感并且也可以指定为十进制数字,
不过最好不要那么做。设施和优先级都在syslog(3)中有描述,下面提到的名字类似于/usr/include/syslog.h中的
LOG_-values
日志设施有:auth(sevurity), authpriv, cron, daemon, kern, lpr, mal, mark, news, syslog, user, uucp以及
local0到local7。security不应使用,mark只应用于内部使用不应用在应用上。不管怎样,你可能想要指定并重定向
这里的信息,日志设备指定了产生信息的子系统,例如,如果邮件程序使用系统日志记录日志,那么就使用mail设备
(LOG_MAIL)
日志级别有(升序):debug, info, notice, warning(warn), err(error), crit, alert, emerg(panic)
不建议使用括号中的关键字,日志级别定义了信息的严重程度。
原生的BSD syslogd的行为习惯是:所有指定级别及以上级别的信息都根据给出的action来处理。
rsyslogd有相同的行为,但也有一些扩展。
rsyslogd可以理解以下扩展:星号*,代表所有日志设施或级别,取决于用在什么位置。
关键字none表示没有级别用于给定的设施
可以在一条语句中指定多个facility使用相同的priority,使用逗号","分隔,没有数量限制。
只有facility部分可以这样定义,priority部分这样写会被忽略
多个selector可以使用分号";"分隔,注意每个selector都可以覆盖之前的定义
可以使用这个行为来去掉一些日志级别
rsyslogd的语法扩展:可在任何级别之前加
等号"=",指定只使用这一个级别而不包含更高级别
叹号"!",忽略所有级别,所有要么指这一个级别(!=),要么指这个及其以上级别(!)
如果要一起使用这两个扩展,!要在=之前。
-----------------------------------------
动作 ACTION
action是规则描述的一部分,规则用于处理消息。总的来说,消息内容被写到一种日志文件上,但也可以
执行其他动作,比如写到数据库表中或转发到其他主机。
正规文件
典型的消息都被记录在真正的文件中,文件要以全路径指定,以"/"开头
*.* /var/log/traditionalfile.log;RSYSLOG_TraditionalFormat 例子,以传统格式记录日志
注意:如果要在日志文件中使用高精度时间戳,去掉";RSYSLOG_TraditionalFormat",就使用
默认的模板,RFC3339时间戳
*.* /var/log/file.log 使用RFC3339时间戳
命名管道 named pipe
此版本rsyslogd支持将日志输出到命名管道(fifos),可以在fifo设备或命名管道前加"|"符来,
将此文件作为日志消息的目的地。这是由于debug的。
注意:fifo设备必须在rsyslogd启动前,以mkfifo命令创建。
终端和控制台
如果指定的文件是tty,特别的tty处理也就完成了,同理/dev/console
远程机器
有3种方式转发消息:
传统方式的UDP传输,有损耗
基于TCP明文的传输,只在特定情况下丢失信息,并被广泛使用
RELP传输,不会丢失信息,但只在rsyslogd 3.15.0及以上版本中可用
写法:
UDP 在主机名前加"@"
TCP 在主机名前加"@@"
RELP 在主机名前加":omrelp:"
例: *.* @192.168.0.1 将所有日志信息通过UDP协议发送到192.168.0.1