我正在使用 journald 日志驱动程序运行 Docker,并使用 rsyslog (v8.29.0) 收集这些消息并将它们写入带有容器信息注释的文件中。我遇到的问题是,$!
除非我先将它们移动到本地$.
命名空间中,否则我无法在模板中的命名空间中使用消息属性。
我从这个配置开始:
module(load="imjournal" StateFile="imjournal.state")
template(name="ContainerTemplate" type="list") {
property(name="timereported" dateFormat="rfc3339" caseConversion="lower")
constant(value=" ")
property(name="$!CONTAINER_NAME")
constant(value=" ")
property(name="$!CONTAINER_ID")
constant(value=" ")
property(name="msg")
constant(value="\n")
}
if (strlen($!CONTAINER_NAME) > 0) then {
action(type="omfile"
file="/var/log/containers.log"
template="ContainerTemplate")
}
即使定义了$!CONTAINER_NAME
和$!CONTAINER_ID
,它们在生成的模板中也会扩展为空字符串。我可以像这样解决这个问题,通过使用现有属性的值显式设置新属性:
template(name="ContainerTemplate" type="list") {
property(name="timereported" dateFormat="rfc3339" caseConversion="lower")
constant(value=" ")
property(name="$.container_name")
constant(value=" ")
property(name="$.container_id")
constant(value=" ")
property(name="msg")
constant(value="\n")
}
if (strlen($!CONTAINER_NAME) > 0) then {
set $.container_name = $!CONTAINER_NAME;
set $.container_id = $!CONTAINER_ID;
action(type="omfile"
file="/var/log/containers.log"
template="ContainerTemplate")
}
这工作正常...但是,如果我改变局部变量的大小写(即,如果我使用$.CONTAINER_NAME
而$.CONTAINER_ID
不是小写的等价物),它的行为与原始配置相同(即使我明确设置了属性,我也会在日志中得到空字符串)。
你知道发生了什么吗?根据文档,property
语句“可以访问所有属性”,所以我很困惑。
答案1
我遇到了同样的问题并通过使模板区分大小写解决了该问题。
改变行
template(name="ContainerTemplate" type="list") {
进入
template(name="ContainerTemplate" type="list" option.casesensitive="on") {