Templates
简介:
模板是rsyslog的一个关键特性,允许用户指定任何格式,也可用于文件名动态生成,每个使用template的rsyslog的输出都
适用于文件,用户信息等,template是一个类似sql语句,是非常灵活的。
Templates被Templates()指定。
The template() statement
template(parameters) { list-descriptions }
每个模板的参数名称,它指定模板名称、模板和参数类型,指定类型。参数名称必须是惟一的。
模板有以下类型:
list
subtree
string
plugin
list:
生成的模板是常量和变量声明的列表,支持结构化(mongodb)输出和文本化输出。
示例:
template(name="tpl1" type="list") {
constant(value="Syslog MSG is: '")
property(name="msg")
constant(value="', ")
property(name="timereported" dateFormat="rfc3339" caseConversion="lower")
constant(value="\n")
}
constant:描述常量,它主要用于基于文本的输出,如果想结构化输出需要加上outname参数。
value - the constant value to use
outname - output field name (for structured outputs)
property:描述属性值,里面包含很多选项,大多数选项用于提取部分文本或修改文本输出内容
支持的选项:
name:访问属性的名称
outname:输出字段名(用于结构化输出)
dateformat:使用的时间格式
caseconversion:转换文本,可以使用lower和upper
controlcharacters:指定如何处理控制字符,可以有3个值escape,space,drop。
securepath:用于创建路径名适用于dynafile模板
format:指定格式字段的基础上。支持的值是:csv,json,jsonr,jsonf,jsonfr。
position.from:获得子串的位置
position.to:获取到子串的截止位置
position.relativeToEnd:从字符串结束的位置开始,而不是起始位置
field.number:获得该字段匹配
field.delimiter:小数(小数)值的字段分隔符字符提取
regex.expression:使用正则表达式
regex.type:使用正则表达式的类型
regex.nomatchmode:如果没有匹配上做什么处理
regex.match:使用匹配
regex.submatch:使用sunmatch匹配
droplastlf:去掉LF(换行),如果存在的话
mandatory:表明(表示)字段是强制性的。如果设置为"on",这个领域总是会出现在数据传递到结构化输出,即使它是空的。如果"关闭"(默认)空字段将不会传递到结构化输出。
这是特别有用的输出,支持动态模式(模式)(如ommongodb)。
subtree:
在7.1.4版本之后有效,模板生成基于一个完整的子树,这种类型的模板适用于怎样处理分层的结构,如ommongodb
name="tpl1" type="subtree" subtree="$!" #包含所有完整的数据
name="tpl2" type="subtree" subtree="$!usr!tpl2 #只包含从$!usr!tpl2开始的字符串
示例:
set $!usr!tpl2!msg = $msg;
set $!usr!tpl2!dataflow = field($msg, 58, 2);
template(name="tpl2" type="subtree" subtree="$!usr!tpl2")
string:
有些类似于legacy 模板的格式,有一个固定的参数string。
示例:
template(name="tpl3" type="string"
string="%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
)
字符串模板的%里面的变量是由property_replacer解释,链接:http://www.rsyslog.com/doc/v7-stable/configuration/properties.html
百分号外的文本全部为常量字符串组成。
plugin:
该类型的模板是有插件生成,通常性能比较好,这种类型的参数必须指定插件和必须包含插件的名称标识本身,在使用之前必须先加载插件。
示例:
template(name="tpl4" type="plugin" plugin="mystrgen")
options:
这部分是可选的,可以影响整个模板和部分模板参数。
option.sql:格式字符串适合在MySQL中SQL语句的格式,将替换字符串中的单引号和转义符号。注意:NO_BACKSLASH_ESCAPES模式必须在关闭状态。
option.stdsql:标准的字符串sql格式输出,用两个单引号替换单引号,如果使用这种格式输出到mysql里面,必须开启NO_BACKSLASH_ESCAPES
option.json:适合一个json语句格式的字符串。这将替换单引号("")由两个单引号("")在每个字段。
示例:
template (name="TraditionalFormat" type="string"
string="%timegenerated% %HOSTNAME% %syslogtag%%msg%\\n"
Examples
示例1:
Standard Template for Writing to Files(写入文件的标准模板格式)
template(name="FileFormat" type="list") { #定义模板名称和类型
property(name="timestamp" dateFormat="rfc3339") #定义访问属性值
constant(value=" ") #定义常量文本内容
property(name="hostname")
constant(value=" ")
property(name="syslogtag")
property(name="msg" spifno1stsp="on" )
property(name="msg" droplastlf="on" )
constant(value="\n")
}
#以上标准模板的string格式如下:
template(name="FileFormat" type="string"
string= "%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
)
示例2:
Standard Template for Forwarding to a Remote Host (RFC3164 mode) template(name="ForwardFormat" type="list") { constant(value="<") property(name="pri") constant(value=">") property(name="timestamp" dateFormat="rfc3339") constant(value=" ") property(name="hostname") constant(value=" ") property(name="syslogtag" position.from="1" position.to="32") property(name="msg" spifno1stsp="on" ) property(name="msg") }
示例3:
Standard Template for write to the MySQL database #相当于编织出一条符合sql语句的字符串
template(name="StdSQLformat" type="list" option.sql="on") {
constant(value="insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag)")
constant(value=" values ('")
property(name="msg")
constant(value="', ")
property(name="syslogfacility")
constant(value=", '")
property(name="hostname")
constant(value="', ")
property(name="syslogpriority")
constant(value=", '")
property(name="timereported" dateFormat="mysql")
constant(value="', '")
property(name="timegenerated" dateFormat="mysql")
constant(value="', ")
property(name="iut")
constant(value=", '")
property(name="syslogtag")
constant(value="')")
等价的字符串模板格式如下:
template(name="stdSQLformat" type="string" option.sql="on"
string="insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%HOSTNAME%', %syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')"
)
Creating Dynamic File Names for omfile 创建动态文件名
将不同主机发来的信息输出到不同的文件
示例:
template (name="DynFile" type="string" string="/var/log/system-%HOSTNAME%.log")
Legacy示例:
$template DynFile,"/var/log/system-%HOSTNAME%.log"
legacy format:
以$配置开头,可以在V7版本中使用。
$template name,param[,options] #name指的是模板的名称,param指定模板的内容,options设置模板的选项。
示例:
$template strtpl,"PRI: %pri%, MSG: %msg%\n"
legacy不支持list模板类型,复杂的工作应该用复杂的property replacer来实现。
plugin
$template plugintpl,=myplugin
Reserved Template Names
以RSYSLOG_开头的是预留模板的标识。
RSYSLOG_TraditionalFileFormat:"旧式"默认日志文件格式和时间戳精度低
RSYSLOG_FileFormat:现代类型日志文件的格式,高精度时间戳和时区信息。
RSYSLOG_TraditionalForwardFormat:传统的转发与时间戳精度格式。
RSYSLOG_SysklogdFileFormat:sysklogd日志文件格式兼容
RSYSLOG_ForwardFormat:一种新的高精度转发格式非常相似的传统。
RSYSLOG_SyslogProtocol23Format:略
RSYSLOG_DebugFormat:一个特殊的格式用于故障诊断的产权问题。