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

rsyslog: укажите параметры действия из переменных среды.

Я использую rsyslog для отправки журналов в elasticsearch. Все это хорошо работает в моей локальной среде, но теперь я пытаюсь сделать ее более общей и вводить переменные среды там, где это необходимо.

Как часть моего rsyslog.conf это действие omelasticsearch:

action(
    type="omelasticsearch"
    server=<somehow use $ES_HOST here>
    template="haproxy"
    bulkmode="on"
    searchIndex="haproxy-index"
    dynSearchIndex="on"
    usehttps="on"
    asyncrepl="on"
    uid=<somehow use $ES_USER here>
    pwd=<somehow use $ES_PASSWORD here>
)

Я пробовал использовать getenv() и установка переменных, но я не смог найти способ вставить указанную переменную в параметры моего действия.

Я пропустил что-то простое, или это просто невозможно?

Оказывается, вы можете выполнить оболочку из файла конфигурации, используя обратные кавычки.

action(
    type="omelasticsearch"
    server=`echo $ES_HOST`
    template="haproxy"
    bulkmode="on"
    searchIndex="haproxy-index"
    dynSearchIndex="on"
    usehttps="on"
    uid=`echo $ES_USER`
    pwd=`echo $ES_PASSWORD`
)

вы также можете использовать этот метод в шаблоне rsyslog для передачи свойств в ваш индекс elasticsearch с такими значениями переменных среды, как это

template(name="logfile" type="list") {
   constant(value="{")

   constant(value="\"@timestamp\":\"")     
   property(name="timegenerated" dateFormat="rfc3339")
   constant(value="\", ")
   
   constant(value="\"pod_namespace\":\"")     
   constant(value=`echo $KUB_POD_NAMESPACE`)
   constant(value="\", ")
   
   constant(value="\"pod_name\":\"")     
   constant(value=`echo $KUB_POD_NAME`)
   constant(value="\", ")
   
   constant(value="\"pod_ip\":\"")     
   constant(value=`echo $KUB_INSTANCE_ADDR`)
   constant(value="\", ")
   
   property(name="$!all-json" position.from="2")
}