Назад | Перейти на главную страницу

rsyslog: использование свойств сообщения в шаблоне

Я запускаю Docker с драйвером журнала journald и использую 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 заявление «может получить доступ ко всем свойствам», поэтому я запутался.

Я столкнулся с той же проблемой и исправил ее, сделав шаблон чувствительным к регистру.

Измените строку

template(name="ContainerTemplate" type="list") {

в

template(name="ContainerTemplate" type="list" option.casesensitive="on") {