用syslong-NG只捕获某些日志

我是Syslog-ng的新手。 沙发我部署它,它运行良好推动一些日志到MongoDB。 现在,我真正想要做的是将一些日志(例如/ var / log / secure)推送到MongoDb,同时将其他日志推送到文件系统,而忽略其他一组日志。

你们能帮我定义一个这样的configuration吗?

谢谢,马克斯。

/var/log/secure应该已经来自syslog-ng。 因此,您只需要redirect日志条目即将发生的地方。

尽量不要用文件的方式来思考。 / var / log / secure是一个文件yes,但只是因为syslog-ng被configuration为在那里放置日志条目。 日志条目包含了'facility','priority',程序名,PID等各种属性。如果我想要的话,我可以告诉syslog-ng从程序的sshd路由所有的日志条目'到/ var / log / secure。

所以你需要做的是改变路由到MongoDB的标准。 让我们假装你的syslog-ngconfiguration如下所示:

 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的filter以包含与/ var / log / securefilter相同的内容。 根据您的syslog-ng版本,这可能就像将f_mongodb更改为以下一样简单:

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

我们所做的就是将f_secure的定义包含在f_mongodb 。 现在,对f_secure任何更改也会影响到f_secure内容。

但是,旧版本的syslog-ng必须执行以下操作(因为recursionfilter是在3.X版本中添加的,我相信):

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

这和我们以前的例子完全一样。 唯一的区别是我们filter(f_secure)滤器本身的内容replace了filter(f_secure) 。 这是所有的filter(f_secure) 。 它只是让你的configuration更容易维护,所以你没有重复的configuration行。

请注意, facility(auth) or facility(authpriv)周围的圆括号filter(f_secure)绝对必要的,我只是将它们包括在内,就像filter(f_secure)的逻辑等价物一样