使用 syslong-NG 仅捕获某些日志

使用 syslong-NG 仅捕获某些日志

我是 Syslog-ng 的新手。到目前为止,我已部署它,并且它运行良好,可以将一些日志推送到 MongoDB。现在,我真正想要做的是将一些日志(例如 /var/log/secure)推送到 MongoDb,同时将其他一些日志推送到文件系统,但忽略其他一些日志集。

你们能帮我定义这样的配置吗?

谢谢,马克斯。

答案1

/var/log/secure应该已经来自 syslog-ng。因此,你只需要重定向日志条目的去向。

尽量不要从文件的角度考虑问题。/var/log/secure 是一个文件,但这只是因为 syslog-ng 配置为将日志条目放在那里。日志条目带有各种属性,如“设施”、“优先级”、程序名称、PID 等。如果我想,我可以告诉 syslog-ng 将所有日志条目从程序“sshd”路由到 /var/log/secure。

因此,您需要做的是更改路由到 mongodb 的标准。假设您的 syslog-ng 配置如下所示:

filter f_secure {
  facility(auth) or facility(authpriv);
};
destination d_secure {
  file('/var/log/secure');
};
log {
  source(s_local); filter(f_secure); destination(d_secure);
};

filter f_mongodb {
  program('foobar');
};
destination d_mongodb {
  mongodb(
    ...
  );
};
log {
  source(s_local); fitler(f_mongodb); destination(d_mongodb);
};

您需要做的就是更改 mongodb 的过滤器,使其包含与 /var/log/secure 过滤器相同的内容。根据您的 syslog-ng 版本,这可能很简单,只需更改f_mongodb为以下内容:

filter f_mongodb {
  filter(f_secure) or program('foobar');
};

f_secure我们所做的只是将的定义纳入f_mongodb。现在对 的任何更改f_secure也会影响进入 mongodb 的内容。

但是,对于旧版本的 syslog-ng,您必须执行以下操作(因为我相信在 3.X 版本中添加了递归过滤器):

filter f_mongodb {
  ( facility(auth) or facility(authpriv) ) or program('foobar');
};

这确实精确的与我们之前的示例相同。唯一的区别是我们用过filter(f_secure)滤器本身的内容替换了它。这就是全部filter(f_secure)。它只是让您的配置更易于维护,这样您就不会到处都有重复的配置行。

请注意,括号里的facility(auth) or facility(authpriv)不是必需的,我把它们包括进去,只是因为它们的逻辑等价filter(f_secure)

相关内容