Skip to main content
 首页 » 编程设计

linux之syslog-ng 多个目的地

2024年02月20日2298°冷暖

我们使用syslog-ng通过tcp将访问日志文件发送到远程服务器。我已经知道可以配置多个目标来完成这项工作,就像:

source s_xxx { file("/xxx/access.log"); }; 
destination d_one {tcp("1.2.3.4", port(1234));};   
destination d_two {tcp("1.2.3.5", port(1234));}; 
log {source(s_xxx); destination(d_one); destination(d_two);}; 

我要弄清楚的是如何将我的内容轮询到这两个目的地(例如循环)。换句话说,我的内容要么发送到 d_one 要么发送到 d_two,而不是同时发送到两者。

非常感谢。

请您参考如下方法:

我的场景非常相似:我有一个 syslog-ng 收集器,它将消息转发到分析应用程序。它变得重载,我需要分担负载。我对要过滤的流量没有要求,并且我不想维护类型列表。我只是想按照您的要求逐条消息进行循环。我决定使用 mod(%) 来实现这一点。

Syslog-ng OSE v3.7.2:

destination d_net_qr1 { network("ip1"); }; 
destination d_net_qr2 { network("ip2"); }; 
 
filter f_qr1     { "$(% ${RCPTID} 2)"  eq "0"  }; 
filter f_qr2     { "$(% ${RCPTID} 2)"  eq "1"  }; 
 
log { source(s_net); filter(f_qr1); destination(d_net_qr1); };     
log { source(s_net); filter(f_qr2); destination(d_net_qr2); };