模板是rsyslog的關鍵功能,它們允許指定用戶可能需要的任何格式。
它們也可以用於動態文件生成, 每個output 在rsyslog 使用模板--
數據庫寫期望它的模板是一個正確的SQL語句。
因此這個是高度自定義的, 你可能會問 所有這些事如何工作的當沒有模板被指定
答案是簡單的,盡管模板是兼容stock syslogd 格式 被硬編碼到rsyslogd.
因此如果沒有模板被指定,我們使用一個硬代碼的模板
$template tocFormat,"%msg%\n"
#$template tocFormat,"%syslogtag%,%msg%\n"
$template zjzc-flow01,"/data01/applog_backup/zjzc_log/zj-flow01-catalina.out.%$year%-%$month%-%$day%" #定義TC:日志存放路徑
模板是通過template()語句指定, 可以通過legacy 語句指定
模板處理:
由於缺乏標准的關於日志格式,當一個模板是特定的 它假設包含HEADER,定義在RFC5424
假設,如果MSG 字段是設置“this:is a message” 沒有HOSTNAME,也沒有指定TAG,分析器會分割消息為:
TAG:this:
MSG:is a message
The template() statement 模板語句
template() 語句是用於定義模板,注意他是一個靜態聲明,
這意味著所有模板是被定義當rsyslog 讀取配置文件, 因此 模板是不被if語句或者配置嵌套的影響
基本的模板語句的結構是如下:
template(parameters)
除了這個簡單的語法,list 模板(下面描述)支持擴展語法:
template(parameters) { list-descriptions }
每個模板有一個參數名字, 指定了模板的名字,和一個參數類型,
指定了模板類型。
名字參數必須是唯一的,如果不是 行為是不可預知的。
類型參數指定不同的模板類型,不同的類型簡單的啟動不同的方式來指定模板內容。
模板類型不影響 一個ouput 插件可以處理它。
創建omfile 動態文件名:
模板可以用於生成actions 使用動態文件名。
比如,你想要分割syslog 消息從不同的主機到不同的文件(一個主機一個文件),你可以定義下面的模板:
template (name="DynFile" type="string" string="/var/log/system-%HOSTNAME%.log")
Legacy example:
$template DynFile,"/var/log/system-%HOSTNAME%.log"
$template zjzc-flow01,"/data01/applog_backup/zjzc_log/zj-flow01-catalina.out.%$year%-%$month%-%$day%"
legacy format:
在rsyslog v6版本之前,你需要使用 $template 語句來配置模板。
它們提供等價於 字符串和基於插件的模板。
legacy 語法在rsyslog v7版本繼續工作,但是我們推薦避免legacy 格式用於新的配置文件。
Legacy 和當前配置語句可以共存在相同的配置文件
The general format is
$template name,param[,options]
name 表示模板名字,param 是一個單獨的參數 指定模板的內存
字符串:
這個參數 是相同的字符串 指定當前格式 你指定的在字符串參數,例如:
$template strtpl,"PRI: %pri%, MSG: %msg%\n"
Legacy String-based Template Samples
這個章節 提供一些默認的模板以legacy 格式, 是用於 rsyslog v6前的版本。
注意 這個格式是仍舊被支持的,因此沒有必須要升級存在的配置。
然而, 它是強烈推薦legacy 結構是不在被使用的當 使用新的模板。
注意 每個 $template statement 是在一個單獨的行