配置syslog-ng服务器以截断中继到多个目的地中仅1个目的地的邮件

时间:2019-05-17 13:42:34

标签: syslog-ng

我现有的syslog-ng PE 5(是的,旧的)服务器使用多个日志语句既可以在本地写入所有日志,也可以将某些消息中继到我们企业中的外部日志扫描服务。

这些外部中继目标之一的操作员已请求我们将中继给它们的每个日志消息截断至特定的最大长度。

我不想减小消息长度的全局值。我只想限制发送到该目的地的大小。

我认为这将是log语句中的开关或标志。我查看了用于重写规则的文档,没有发现明显的问题。

您如何解决此问题?

1 个答案:

答案 0 :(得分:0)

虽然设置标志并不简单,但我可以想到3-4种可能的解决方案。不过,并非所有人都可以在PE 5上正常工作。

如果您愿意升级:

  1. 较新的syslog-ng版本(PE 7 / OSE 3.1x)具有substr() template function可以完全满足您的需要,因此您可以在将日志发送到扫描仪的目标模板中使用它。 / li>
  2. 如果您安装了最新的syslog-ng版本(PE 7.12+ / OSE 3.15+),并且需要进行更精细的处理,则可以使用Python编写自定义模板函数来对消息进行切片和切块。

如果您要坚持使用旧版本:

  1. 由于您已经将日志消息写入文件,因此可以在syslog-ng中创建新的文件源,从文件中读取消息,并将该源的log-msg-size()选项设置为您希望截断消息的限制(IIRC,syslog-ng将截断消息并丢弃多余的消息,但是您必须测试它不会从截断的部分创建第二条消息)。此解决方案的问题是IIRC,PE 5中的文件源不能跟随多个文件,因此,如果在文件/目录名称中使用日期宏或类似名称,则将出现问题。 PE 6+和更高版本的OSE版本可以在文件源中使用通配符。
  2. 如果其他所有方法均失败,则可以尝试使用程序目标编写脚本以某种方式处理消息。

就个人而言,我建议您进行某种升级(PE 5较早且已停产)。如果您不能升级到最新的PE版本,则最简单的解决方案可能是安装OSE中继,因此您的PE 5服务器会将日志发送到OSE,后者可以使用substr()模板函数截断消息并将其发送到您的日志扫描器。

HTH, 罗伯特