rsyslog:从环境变量中指定“action”参数

rsyslog:从环境变量中指定“action”参数

我正在使用 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()和设置变量,但找不到将该变量注入到我的操作参数中的方法。

我是否忽略了一些简单的事情,或者这根本就不可行?

答案1

事实证明,您可以使用反引号从配置文件中取出。

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`
)

答案2

您还可以在 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")
}

相关内容