我正在多租户环境中设置 rsyslog 以中继到中央服务器。因为它是多租户的,所以在中继到中央服务器之前,我想在第一个 rsyslog 服务器的主机名前加上客户特定的前缀。我本来打算手动设置前缀,但是,前缀是在服务器上的另一个文件中配置的,如果可以从那个文件中收集到,那就更好了。
因为第一台服务器将从多个主机进行中继,所以前置必须是动态重写,包括原始主机名,而不是对所有条目的相同主机名进行硬编码覆盖,我在一些示例中看到过。
理想情况下,我正在尝试做的是由以下伪代码总结的:
ruleset(name="myrule"){
set $hostname = "<prefix>-%HOSTNAME%"
action(type="omfwd" target="remote-ip")
}
我会同时负责中间中继和中央服务器,但每个中继可以承载多个客户,所以我不认为重写可以在中央服务器上完成,但我完全控制了两层。每个客户都通过专用接口连接,我计划将一个单独的规则集附加到为每个接口配置的输入,并且该规则集包含客户特定的前缀。出于这个原因,我认为配置需要在中继上,但如果有不同的方式,那么我愿意尝试任何满足使事件可被客户识别的最终目标的方法。
想要使用主机名重写的原因是因为这与环境中其他工具的配置方式一致,并且非常希望保持同质设置。但是,如果这不可能,如果第一种方法在技术上不可行,则可以考虑另一种方法。
正确的做法是什么?
这个问题的答案最终出奇地简单。我像这样在模板中注入了一个常量值:
template(name="ForwardFormat" type="list") {
constant(value="<")
property(name="pri")
constant(value=">")
property(name="timestamp" dateFormat="rfc3339")
constant(value=" ")
constant(value="myprefix-")
property(name="hostname")
constant(value=" ")
property(name="syslogtag" position.from="1" position.to="32")
property(name="msg" spifno1stsp="on" )
property(name="msg")
}