Templates 模板:
模板是rsyslog的关键特征,它们允许指定用户需要的任何格式。
它们也用于动态文件名生成。
$EscapeControlCharactersOnReceive off
$template tocFormat,"%fromhost-ip%,%$!metadata!filename%,%msg%
"
######weblogic 交易日志##################################################################################
$template testlog01,"/data01/%fromhost-ip%/%syslogtag%.%$year%-%$month%-%$day%"
:syslogtag,isequal,"testlog01" -?testlog01;tocFormat
每个output 在rsyslog 使用模板,这对于文件来说是正确的,用户信息等待。
数据库写期望它是模板成为适当的SQL语句
因此这个是高度自定义的,你可能会问,当没有指定模板时,是 如何工作的? 非常好的问题。
答案是简单的,尽管模板是和stock syslogd格式兼容的 是硬编码到rsyslod.
因此如果没有指定模板,我们使用硬编码的模板
模板是通过 template() statements 指定,也可以通过 $template legacy statements指定
Template processing 模板处理:
由于缺乏标准的日志格式,当一个模板是被指定是包含 HEADER, as defined in RFC5424
这是非常重要的,以及如何理解rsyslog 是如何解析工作的
比如,如果MSG 字段是设置为 “this:is a message” and no HOSTNAME, 也诶呦指定TAG
解析器会分割消息为:
TAG:this:
MSG:is a message
模板语句基本结构如下:
template(parameters)
除了简答的语法,list模板(下面要描述)支持扩展语法:
template(parameters) { list-descriptions }
每个模板有一个参数名字, 指定了模板的名字,和参数类型,指定了模板类型。
name parameter 必须是唯一的,
行为是不可预知的。
type 参数执行不同的模板类型,不同的类型简单的启用不同的方式来指定模板内容。
模板类型不影响 output 插件。因此使用最好的满足你需求的 下面的类型是可用的:
list
subtree
string
plugin
在这种情况下,模板是有常量和变量语句生成的。
安装大括号中的模板规范, 这种类型主要是对于使用结构意识输出,像ommongodb。
然而,它也非常适合基于文本输出。
我们推荐使用这个模板如果更加复杂的属性替换需要被处理。
在那种情况下, list-based 模板语法是更加简单的相比简单的string-based
列表模板包含模板头(使用 type=”list”) ,后面是常量和属性语句,
用化括弧表示它们属于的模板语句。
正如名字所说,常量语句描述常量文本和属性描述属性访问。
有很多可供选择的属性,进一步描述。
这些选项中的大多数是用于提取部分内容或者修改所获得的文本
template(name="tpl1" type="list") {
constant(value="Syslog MSG is: '")
property(name="msg")
constant(value="', ")
property(name="timereported" dateFormat="rfc3339" caseConversion="lower")
constant(value="
")
}
这个例子是主要针对基于文件的输出
constant statement 常量声明:
这个提供一种方式指定固定文本。文本是逐字使用的。
它主要用于基于文本的输出, 因此可以包含一些常量文本。
例如,如果一个复杂的模板是创建用于文件输出,一个通常需要完成使用一个换行符,
它可以通过一个常量声明介绍。
template(name="outfmt" type="list") {
property(name="$!usr!msgnum")
constant(value="
")
}
下面的转义序列是在常量文本中被识别:
1. \ - single backslash
注意: 如果一个不之处的字符跟在一个反斜杠后面,这被视为一个错误。在这种情况下,行为是不可预测的
为了避免相同的模板使用都为基本文本输出和结果,
constant text 没有一个“outname” 参数会被忽略当创建一个 name/value tree 用于结构化输出。
因此如果你需要提供一些constant text e.g. to mongodb,你必须包含一个outname
template(name="outfmt" type="list") {
property(name="$!usr!msgnum")
constant(value="
" outname="IWantThisInMyDB")
}
property statement 属性声明:
此语句是用于包含属性文本,它可以访问所有的属性。此外,选项允许指定选择一个属性的部分或者修改它
它支持以下参数: