日志转发链要核查什么
集中化日志把“采集—传输—接收—存储”串成一条链,任一环节出问题都会形成盲区:agent 未启动、传输用 UDP 静默丢包、接收端队列溢出丢消息、磁盘缓冲写满、存储轮转过快。取证前必须先确认这条链是否完整,否则“日志里没有”很可能只是“日志没到”。核查顺序建议从应用侧(源日志是否存在)→ 传输配置(协议与队列)→ 接收侧(队列与写入)→ 存储(保留期与轮转),每一步都留下检查记录。
基本信息
| 适用平台 | rsyslog / syslog-ng / journald 转发、Windows 事件转发(WEF)等 |
|---|---|
| 关键配置 | 转发动作(omfwd 或 @/@@ 写法)、队列类型与磁盘辅助队列、TLS 选项 |
| 常见丢数据原因 | UDP 传输、内存队列溢出、接收端磁盘满、日志级别过滤 |
| 核查入口 | /etc/rsyslog.conf 与 /etc/rsyslog.d/*.conf、/var/spool/rsyslog/ 队列文件、服务日志 |
| 输出要求 | 断链时段需在报告中声明为证据盲区 |
典型使用场景
- 确认告警缺失是“没发生”还是“没采集”,避免误判安全状况
- 评估某段时间日志完整性的可信度,为结论划定边界
- 排查集中化平台收不到日志的根因(网络、认证、磁盘)
- 核对源端与集中端记录条数差异,量化丢失规模
- 为加固提供依据:把易丢数据的配置改为带磁盘队列的可靠传输
核查点
核查点
# 1) 转发动作与协议:单 @ 为 UDP,双 @@ 为 TCP
grep -E '^\*\.\*|omfwd|action\(type' /etc/rsyslog.conf /etc/rsyslog.d/*.conf
# 2) 队列配置:是否使用磁盘辅助队列(丢消息的主要防线)
grep -Ei 'queue\.type|queue\.filename|ActionQueue' /etc/rsyslog.conf /etc/rsyslog.d/*.conf
# 3) 队列积压情况(有内容说明曾出现投递困难)
ls -lh /var/spool/rsyslog/ 2>/dev/null
# 4) 服务侧日志:连接失败、重试与丢弃记录
journalctl -u rsyslog -n 50
# 5) 与集中端对比条数,量化差异环节对照
| 环节 | 常见问题 | 核查方式 |
|---|---|---|
| 采集端 | agent 未启动、级别过滤、规则丢弃 | 查服务状态与配置文件中的过滤条件 |
| 传输 | UDP 丢包、TLS 握手失败 | 确认协议写法与证书配置,检查失败日志 |
| 接收端队列 | 内存队列溢出、磁盘队列满 | 看队列文件与服务统计输出 |
| 存储 | 保留期过短、轮转策略不当 | 查存储保留策略与最早期记录时间 |
| 时间戳 | 各环节时钟不同步 | 对比源日志与集中日志的时间差 |
UDP 转发在网络拥塞或接收端缓慢时会静默丢包,关键主机建议改用 TCP 或带确认机制的可靠传输,并配置磁盘辅助队列。
队列积压恢复后会集中补传:集中端会出现时间戳连续但实际为延迟到达的记录,按接收时间判断事件顺序会得到错误结论,应以事件自身时间戳为准。