rsyslog:使用不同的模板将不同类型的消息转发到同一服务器

rsyslog:使用不同的模板将不同类型的消息转发到同一服务器

我有以下 rsyslog 配置:

template(name="logz.io" type="string" string="[TOKEN] 
         <%pri%>%protocol-version% %timestamp:::date-rfc3339% [hostname] 
         %app-name% %procid% %msgid%  tag=\"syslog\"] %msg%\n")

# Send messages over TCP using the template.
action(type="omfwd" protocol="tcp" target="listener.logz.io" port="5001"
       template="logz.io" StreamDriver="gtls" StreamDriverMode="1"
       StreamDriverAuthMode="x509/name" StreamDriverPermittedPeers="*.logz.io")

现在我想type="string"按照以下其中一个消息类型.所以我可以创造个别模板对于每种类型

template(name="logz.io_nginx" type="nginx" string="[TOKEN] 
         <%pri%>%protocol-version% %timestamp:::date-rfc3339% [hostname] 
         %app-name% %procid% %msgid%  tag=\"nginx\"] %msg%\n")

然而,这意味着操作应该根据类型调用正确的模板。

  1. 我如何配置 rsyslog 以使用具有不同模板的相同操作?
  2. 我是否可以只有一个模板,但例如type根据消息类型动态设置参数?

答案1

rsyslog 应该如何知道消息类型,它是 logz 概念而不是 rsyslogd 概念?您可能必须根据 syslogtag/programname 区分操作,使用 if 语句,并在 if-then-block 中选择适当的模板。

相关内容