Я запускаю 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") {