rsyslog:在模板中使用消息属性

rsyslog:在模板中使用消息属性

我正在使用 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") {

相关内容