日志远端转发
把日志实时转发到远端服务器,是应对本地日志被删除或系统被重装最有效的办法。rsyslog 的转发语法很简洁:一个 @ 表示 UDP,两个 @@ 表示 TCP。看懂这一行,就能判断现有配置是否真的把日志送了出去。
基本信息
| 配置文件 | /etc/rsyslog.conf 与 /etc/rsyslog.d/*.conf |
|---|---|
| UDP 语法 | *.* @主机:514 |
| TCP 语法 | *.* @@主机:514 |
| 可靠性 | 队列参数可缓解断链期间的日志丢失 |
| 加密方式 | 通过 TLS 相关模块与证书实现 |
| 验证方式 | 用 logger 生成测试消息并核对远端是否收到 |
典型使用场景
- 判断日志是否已转发到集中平台
- 排查转发中断导致的日志缺失
- 评估本地日志被清理后的可恢复性
- 核对转发范围是否覆盖关键设施
- 为集中审计与合规检查提供配置依据
最小示例
最小示例
grep -Rn -E '^\s*[^#].*\s@{1,2}' /etc/rsyslog.conf /etc/rsyslog.d/ 2>/dev/null | head
logger -p authpriv.notice 'forward-test' # 生成一条测试日志
tail -5 /var/log/auth.log # 确认本地写入
grep -Rn 'imudp\|imtcp\|omfwd' /etc/rsyslog.d/ 2>/dev/null | head
ss -tunp 2>/dev/null | grep -E ':(514|6514)' | head # 观察转发连接
systemctl status rsyslog --no-pager | head -8 # 服务运行状态要素与注意
| 要素 | 含义 | 注意 |
|---|---|---|
| 单个 @ | UDP 转发 | 不保证送达,网络拥塞会丢包 |
| 双 @@ | TCP 转发 | 可确认连接状态,可靠性更高 |
| 目标端口 | 默认 514,加密常用其它端口 | 需确认远端监听端口 |
| 队列配置 | 断链时暂存消息 | 未配置队列则断链即丢日志 |
| 过滤规则 | 决定转发哪些设施 | 范围过窄会漏掉关键日志 |
UDP 转发在网络拥塞时会丢包,重要环境建议使用 TCP 并配置队列,把断链期间的日志暂存下来。
转发中断期间本地日志仍在写入,采集时要把本地文件作为兜底来源,不能只依赖远端平台的数据。
加密转发需要先部署证书并加载相应模块,仅把端口改成常见加密端口不会自动启用加密。
修改转发配置会即时改变日志流向,可能造成证据链中断;变更前记录现有配置与文件哈希。