You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单rsyslog规则集+主过滤器处理多端口日志过滤的可行性问询

当前配置不可行,及优化方案

为什么当前配置不行?

rsyslog中同名规则集会被最后加载的配置文件覆盖。你的配置里,0_MasterFilter.conf先定义了rsyslog_rules规则集,但后面的1_Port514.conf和2_Port600.conf又重新定义了同名规则集,最终生效的只有最后加载的那个规则集(通常按文件名排序,也就是2_Port600.conf里的规则)。这直接导致0_MasterFilter.conf里的全局过滤规则完全失效,根本达不到统一过滤的目的。

更优方案推荐

方案1:全局前置过滤(最简单,适配统一规则需求)

直接在0_MasterFilter.conf里用全局过滤器,不需要规则集,让所有日志先经过这层过滤,再进入后续端口的专属处理。这种方式不用修改端口配置的核心逻辑,管理成本最低。

修改0_MasterFilter.conf:

# 全局过滤:所有输入日志都会先经过这里,丢弃指定主机/IP的日志
if $fromhost starts with 'bilbo' or $fromhost-ip == '0.1.1.1' then { stop }

然后给每个端口配置独立的规则集,避免冲突:

1_Port514.conf

ruleset (name="port514_rules") {
    if $fromhost starts with 'testbox' or $fromhost-ip == '0.2.2.2' then { stop }
    set $!dev='syslog_server'
    set $!loc='net1'
    action (type="omfile" dynafile="514_serverX")
}
input (type="imptcp" port="514" ruleset="port514_rules")
input (type="impudp" port="514" ruleset="port514_rules")

2_Port600.conf

ruleset (name="port600_rules") {
    if $fromhost starts with 'lost' or $fromhost-ip == '0.3.3.3' then { stop }
    set $!dev='dum_machine'
    set $!loc='backroom'
    action (type="omfile" dynafile="600_test")
}
input (type="imptcp" port="600" ruleset="port600_rules")

方案2:规则集嵌套调用(保留分层逻辑,适合复杂场景)

如果一定要用规则集实现分层过滤,可以定义一个全局过滤规则集,然后在每个端口的规则集里先调用它,再执行端口专属逻辑。

0_MasterFilter.conf

ruleset (name="global_filter") {
    if $fromhost starts with 'bilbo' or $fromhost-ip == '0.1.1.1' then { stop }
}

1_Port514.conf

ruleset (name="port514_rules") {
    # 先执行全局过滤规则
    call global_filter
    # 再处理端口专属逻辑
    if $fromhost starts with 'testbox' or $fromhost-ip == '0.2.2.2' then { stop }
    set $!dev='syslog_server'
    set $!loc='net1'
    action (type="omfile" dynafile="514_serverX")
}
input (type="imptcp" port="514" ruleset="port514_rules")
input (type="impudp" port="514" ruleset="port514_rules")

2_Port600.conf同理,在规则集开头调用global_filter即可。

方案3:包含文件复用规则(适合规则需多处复用的场景)

把全局过滤规则写成单独的代码片段文件,然后在每个端口的规则集里通过include()引入,避免重复编写相同规则。

创建global_filter.snippet:

if $fromhost starts with 'bilbo' or $fromhost-ip == '0.1.1.1' then { stop }

1_Port514.conf

ruleset (name="port514_rules") {
    include(file="/path/to/global_filter.snippet")
    if $fromhost starts with 'testbox' or $fromhost-ip == '0.2.2.2' then { stop }
    set $!dev='syslog_server'
    set $!loc='net1'
    action (type="omfile" dynafile="514_serverX")
}
input (type="imptcp" port="514" ruleset="port514_rules")
input (type="impudp" port="514" ruleset="port514_rules")

2_Port600.conf同样引入该片段文件即可。

总结

  • 当前配置因规则集覆盖问题,全局过滤完全失效,不可行。
  • 优先选方案1(全局前置过滤),实现最简单,完全匹配你“统一位置过滤”的需求,管理成本最低。
  • 如果需要保留规则集的分层逻辑,选**方案2(规则集嵌套)**更清晰。

内容的提问来源于stack exchange,提问作者MrMr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:05:23