我正在尝试使用 syslog-ng 为日志服务器和客户端创建 Puppet 配方。我知道我可以使用模板 erb 文件来自定义配置文件,并替换 erb 文件中的某些变量。我还知道资源file
只是替换源或模板中的文件。
但是,我的问题是每个客户端都有不同的要求和需要重定向的不同数量的文件,并且大多数客户端不使用 syslog API 来记录其信息,因此我必须在每个客户端上为每个应用程序指定文件名,并且因此必须继续将内容添加到服务器配置文件中。
我在 puppet 中找不到任何可以帮助我生成或将信息添加到现有 syslog-ng.conf 文件中的循环功能。我看到的只是资源file
将替换现有资源,除非我使用 做一些聪明的事情exec
。
答案1
您可以尝试创建带有一些变量的模板,例如
source s_<%= localhost_name%> {
tcp(ip(0.0.0.0)
port(<%= log_port%>));
};
template t_<%= localhost_name%> {
template ("$MSGHDR$MSG\n");
template_escape(no);
};
destination d_<%= localhost_name%> {
file("<%= log_file%>" template(t_<%= localhost_name%>));
};
log {
source(s_<%= localhost_name%>);
destination(d_<%= localhost_name%>);
};
这将生成一个文件,该文件将监听 syslog 端口上的所有 TCP 地址并相应地过滤消息。