Logging

rsyslog:從環境變數中指定 action 參數

  • August 4, 2020

我正在使用 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 模板中使用此技術將屬性傳遞給您的彈性搜尋索引,其環境變數值如下

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")
}

引用自:https://serverfault.com/questions/979959