Ubuntu

在 rsyslog 模板中使用 linux 環境變數

  • August 4, 2020

我正在嘗試向我的 rsyslog 模板添加一個環境變數。

我嘗試使用’getenv()‘函式沒有任何運氣,我總是得到一個空字元串作為回報。

我附上了我的 rsyslog 配置文件的範例,我使用 ‘HOME’ 環境變數作為範例。

/etc/rsyslog.d/00-my_log.conf

set $.my_home=getenv("HOME");

template(name="json-template"
 type="list") {
   constant(value="{")
     constant(value="\",\"my_home\":\"")     property(name="$.my_home")
     constant(value="\",\"message\":\"")     property(name="msg" format="json")
   constant(value="\"}\n")
}

*.* action(type="omfile" dirCreateMode="0700" FileCreateMode="0644"
      template="json-template" File="/var/log/my_log")

/var/log/my_log

{"my_home":"","message":"my log message"}

rsyslogd:版本 8.4.2

我能夠使用此指導 rsyslog:Specify action parameters from environment variables

從配置文件中取出以獲取模板中的環境變數:

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/962610