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

无法通过syslog-ng排除特定日志消息发送至远程服务器

无法通过syslog-ng排除特定日志消息发送至远程服务器

看起来你的配置里有两个关键问题导致那条ntpd.的内核日志还是会跑到远程服务器上,咱们一步步拆解解决:

问题1:过滤器逻辑写反了

你定义的f_ntpd过滤器是:

filter f_ntpd { not match("ntpd." value(MESSAGE)); };

这个过滤器的作用是匹配那些不含"ntpd."的消息,而你实际想要的是排除含"ntpd."的消息,逻辑完全搞反了。应该把过滤器改成匹配要排除的内容:

filter f_ntpd { match("ntpd." value(MESSAGE)); };

问题2:日志路由范围太窄

你的当前log块只对devd日志应用了过滤逻辑,其他所有日志(包括那条kernel发出的ntpd.消息)根本没经过过滤就直接通过else分支发送到远程了。

修正后的完整配置示例

根据你的需求(devd日志排除ntpd后本地处理,其他日志排除ntpd后发远程),可以这样调整:

首先修正过滤器,再调整路由逻辑:

# 目标:匹配要排除的含"ntpd."的消息
filter f_ntpd { match("ntpd." value(MESSAGE)); };
# 可选:更精准匹配kernel发出的ntpd消息,避免误删其他日志
# filter f_kernel_ntpd { program("kernel") and match("ntpd." value(MESSAGE)); };

filter f_devd { program("devd"); };
destination lc_net { tcp("192.168.0.2" port(3000) log_fifo_size(1000)); };
# 本地存储devd日志的示例目的地
destination d_devd { file("/var/log/devd.log"); };

# 处理devd日志:保留不含ntpd的devd日志,存在本地
log {
    source(src);
    filter(f_devd);
    not filter(f_ntpd); # 排除含ntpd的devd日志
    destination(d_devd);
};

# 处理其他日志:排除含ntpd的消息,发送到远程
log {
    source(src);
    not filter(f_devd);
    not filter(f_ntpd); # 排除含ntpd的非devd日志(包括那条kernel日志)
    destination(lc_net);
};

如果用精准的f_kernel_ntpd过滤器,只需要把上面的not filter(f_ntpd)替换成not filter(f_kernel_ntpd)即可,这样只会针对kernel发出的ntpd.消息生效,更安全。

最后一步:重启生效

修改完配置后,记得重启syslog-ng服务让配置生效:

service syslog-ng restart

备注:内容来源于stack exchange,提问作者Ilya Shmadchenko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 07:50:27