Я создаю здесь AMI для своей организации, которые включают конфигурацию по умолчанию для отправки всех наших журналов в Loggly из rsyslogd. Он работает довольно хорошо, но я хотел бы иметь возможность настраивать конфигурацию из сценария cloud-init, чтобы предоставлять настраиваемые теги ведения журнала для каждого экземпляра. Я бы хотел сделать что-то подобное в cloud-init:
#cloud-config
write_files:
- path: /etc/sysconfig/rsyslog-loggly
content: |
LOGGLY_TAGS=staging,search,solr,staging-search-solr
А затем прочитать переменную / файл среды в конфигурации rsyslog:
$template LogglyFormat,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [---TOKEN--- tag=\"$LOGGLY_TAGS\"] %msg%"
Есть ли способ получить файл среды или прочитать переменную среды в rsyslog конфиг? Я всегда мог дополнить модуль SystemD для rsyslog, включив в него файл среды, при условии, что я смог его прочитать.
Чего я бы хотел избежать, так это делать что-то вроде этого:
[Service]
...
ExecStartPre=/usr/local/sbin/rewrite-loggly-conf.py
и переписывать конфигурацию при каждой загрузке каким-нибудь скриптом Python.
Есть ли в rsyslog способ сделать то, что я хочу выполнить?
Да, вы можете включать переменные среды аналогично сценариям оболочки, используя обратные кавычки. Это работает с rsyslog 8.33.0
Из Строковые константы в документации rsyslog:
обратные кавычки
Это было добавлено в 8.33.0. Идея состоит в том, чтобы предоставить полезное подмножество что делает оболочка. На данный момент поддерживается только следующее:
echo $ VARNAME - Он оценит переменную среды и будет использовать ее как строковую константу. Если переменная не найдена, пустая строка
генерируется (это не ошибка).
Начиная с версии 8.37.0, случай эха был улучшен. Теперь это больше похоже на то, что делает bash. Он поддерживает несколько
расширения переменных среды, а также постоянный текст между ними.
Пример: env SOMEPATH имеет значение «/ var / log / custompath» конфигурация: param = echo $ SOMEPATH / myfile param, чем расширяется до «/ var / log / custompath / myfile» Обратите внимание, однако, что некоторые общие функции bash не поддерживаются. Самое главное, $ {VAR} не работает. Также переменные среды
заканчиваются только пробелом или /. Также нет таких вещей, как $ (pwd) поддерживается. Идея этого параметра не в том, чтобы обеспечить полноценную bash-эквивалент, но предоставляет некоторую функциональность, которая обычно считается полезным для настройки конфигурации rsyslog с внешним данные. Тем не менее, мы по-прежнему заинтересованы в расширении покрытия, если дается ясная необходимость и аргументация.
cat filename - оценивает содержимое данного файла. Поддерживается только одно имя файла. Если файл не читается, он
вернет пустую строку.
Любая другая конструкция в настоящее время приведет к сообщению об ошибке.Обратите внимание, что между «эхо» или «котом» и другим должен быть ровно один пробел. параметр.
Обратные кавычки особенно полезны для файлов конфигурации, которые автоматически создается, но должен содержать небольшой набор специальных функциональность.
Чтобы увидеть пример этого в действии, взгляните на окно настройки rsyslog. устройство доступно на https://github.com/rsyslog/rsyslog-docker/tree/master/appliance/alpine .