必须加载imuxsock、imklog和imtcp模块,转发默认日志流需在rules区末尾追加@@规则且保留本地写入,自定义文件监控须用imfile模块单独配置,接收端需匹配协议、开放端口并正确设置规则。

能直接转发系统日志(比如 /var/log/messages、/var/log/secure),但必须区分“默认日志流”和“自定义文件监控”,不能只加一行 *.* @@ip:port 就完事——否则会漏掉关键日志或触发重复发送。
确认 rsyslog 服务状态和基础模块是否加载
CentOS 7 默认已安装 rsyslog,但某些最小化安装可能未启用或缺少必要模块。先验证:
- 运行
systemctl status rsyslog确认服务正在运行; - 检查
/etc/rsyslog.conf开头的MODULES区域,确保有$ModLoad imuxsock(本地日志输入)和$ModLoad imklog(内核日志)——这两项缺失会导致kern.*、authpriv.*等原始日志根本进不来; - 如果要用 TCP 转发(推荐),必须显式加载
$ModLoad imtcp,仅靠@@语法不会自动加载该模块; -
imfile模块只用于监控任意文本日志文件(如应用日志),**不用于系统默认日志流**,别误用它去处理/var/log/messages。
转发系统默认日志流(messages、secure、cron 等)
系统日志由 imuxsock 和 imklog 采集后,通过 RULES 区域的 selector-action 规则分发。转发时需在规则末尾添加目标,而非覆盖原有本地写入规则:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 在
/etc/rsyslog.conf的RULES区域底部(例如*.emerg :omusrmsg:*后)追加:*.* @@10.10.129.36:514(TCP)或*.* @10.10.129.36:514(UDP); - 若只想转发特定设施(比如只传认证日志),用
authpriv.* @@10.10.129.36:514,避免把mail.*或cron.*也塞过去; - 注意:不要删除或注释掉原有本地写入行(如
authpriv.* /var/log/secure),否则本地日志就丢了——rsyslog 支持多目标输出,不是“替换”而是“追加”; - 转发规则必须放在所有本地写入规则之后,否则
stop或~操作可能提前终止日志流。
接收端必须监听对应协议且开放端口
发送端配了 @@(TCP),接收端却只开了 UDP 监听,日志必然丢弃。接收端配置需明确匹配:
- 在接收端
/etc/rsyslog.conf的MODULES区域启用:$ModLoad imtcp$InputTCPServerRun 514; - 防火墙必须放行 TCP 514:
firewall-cmd --permanent --add-port=514/tcp,然后firewall-cmd --reload; - SELinux 若开启,需允许网络日志接收:
setsebool -P syslogd_can_network_connect on; - 接收端的
RULES部分要指定接收后存哪,例如:local5.* /var/log/op_log.log(前提是发送端用了local5设施,否则对不上)。
非系统日志文件(如应用日志)需用 imfile 单独监控
像 /var/log/xxx/xxxx_1113134251.log 这类非 syslog 标准路径的日志,rsyslog 不会自动采集,必须用 imfile 模块主动监控:
- 在发送端
/etc/rsyslog.conf的MODULES区域加载:$ModLoad imfile$InputFilePollInterval 5(轮询间隔,单位秒); - 在
RULES前添加 input 定义:input(type="imfile" ruleset="remote" File="/var/log/xxx/xxxx_1113134251.log" Tag="xxx:" StateFile="stat-xxx-log"); - 注意
StateFile必须唯一且可写,否则反复重发;Tag会影响接收端$fromhost-ip和$programname的解析; - 这类日志默认走
local5设施,所以接收端规则要用local5.*匹配,不能指望它出现在authpriv.*或*.*里。
最容易被忽略的是模块加载顺序和规则位置:没加载 imtcp 却用 @@,或把转发规则写在 stop 操作之后,日志就静默消失了。调试时优先看 journalctl -u rsyslog -n 50,比盲改配置更可靠。










