Syslog-ng 多个过滤器

Syslog-ng 多个过滤器

我对 syslog-ng 还很陌生,并且遇到了以下问题。

我有一个 Checkpoint 防火墙,它会将日志发送到 Splunk 服务器。由于防火墙发送的数据量巨大,我试图过滤掉不需要的日志。由于防火墙和 Splunk 都无法做到这一点,我现在将防火墙日志发送到 syslog-ng 服务器,该服务器会过滤掉不需要的消息,并通过 Splunk-forwarder 将其余日志转发给 Splunk。

Syslog-ng 服务器上的日志定义如下所示:

log {
    source { network(transport(tcp)  port(12001) flags(no-parse)); };<br>
    parser { checkpoint-parser(); };
    filter { not match("Application_Allow_all", value("MESSAGE")); };
    destination { file("/var/log/syslog-ng/checkpoint.txt"); };
};

80% 的防火墙日志包含“应用程序_允许_全部”,而我们在 Splunk 服务器上不需要它。到目前为止一切顺利,过滤器可以正常工作。

现在来谈谈问题。我需要在 Splunk 服务器上获取包含“Web 服务器访问”的防火墙日志。但是包含以下内容的防火墙日志条目“Web 服务器访问”还包含“应用程序_允许_全部”

我不知道如何组合两个过滤器,而且到目前为止我在互联网上找到的方法都不起作用。

我尝试了以下方法:

filter { match("Webserver access", value("MESSAGE")); };
filter { not match("Application_Allow_all", value("MESSAGE")); };

使用这些过滤器,我现在只获得包含“Web 服务器访问”的日志,没有其他内容。第二个过滤器似乎被忽略了。

日志条目在 Splunk 服务器上的样子如下:

"rule_action=Accept | rule_name=Webserver access | rule_name=Application_Allow_all"

我想要实现的是让 syslog-ng 将包含“Webserver Access”的日志转发到 Splunk 服务器,同时丢弃所有包含“Application_Allow_all”的其他日志。

欢迎任何想法。

答案1

我可能弄错了,但如果我理解正确的话,那么您正在寻找类似这样的东西:

     filter { match("Webserver access", value("MESSAGE")) or (not match("Application_Allow_all", value("MESSAGE"));  };

有关详细信息和示例,请参阅组合 syslog-ng 过滤器

另外,从 4.2 版开始,syslog-ng 可以将日志直接发送到 Splunk,这样你就不必使用通用转发器,而可以使用 syslog-ng 进行过滤和发送。

(该链接指向 Axosyslog 的文档,Axosyslog 是一个支持云的 syslog-ng 发行版,由 syslog-ng 的原始创建者维护)

答案2

可以通过 Splunk 进行过滤。将以下内容添加到 props.conf 文件中:

[mysourcetype]
TRANSFORMS-filter_appl_allow_all = rm_appl_allow_all

然后将其添加到同一应用程序中的 transforms.conf 文件中

[rm_appl_allow_all]
REGEX = Application_Allow_All
DEST_KEY = queue
FORMAT = nullQueue

转换会丢弃与指定正则表达式 (REGEX 键) 匹配的任何事件。props 设置会调用转换。props.conf 节名称(上面的“mysourcetype”)必须与发送系统指定的源类型名称匹配。

相关内容