Прочитать переменную среды (или файл среды) из конфигурации rsyslog?

Я создаю здесь 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 способ сделать то, что я хочу выполнить?

0
задан 10 March 2016 в 02:13
1 ответ

Да, вы можете включать переменные среды аналогично сценариям оболочки, используя обратные кавычки. Это работает с 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 .

0
ответ дан 26 February 2020 в 03:50

Теги

Похожие вопросы