我是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)的逻辑等价物一样