我是 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)
于