我对 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”)必须与发送系统指定的源类型名称匹配。