日志与告警分析
让日志和告警成为定位故障的「证据链」,而不是满屏噪声。本技能覆盖 syslog 集中采集、SNMP trap、时间同步、关键事件覆盖、多源关联分析与告警分级抑制,附关键事件解析脚本。
一、核心原理:从日志到可行动告警
日志分析的链路是 采集 → 标准化 → 关联 → 分级 → 通知 → 闭环。单条日志价值有限,把「同一时间的多条日志 + trap + 指标」串起来,才能定位根因。
flowchart LR
D1[设备 syslog] --> C[集中采集<br/>rsyslog/syslog-ng]
D2[SNMP trap] --> C
D3[NetFlow/sFlow] --> C
C --> N[标准化<br/>时间对齐/字段解析]
N --> R[关联引擎<br/>多源聚类/去重]
R --> A[分级告警<br/>紧急/重要/提示]
A --> P[通知路由<br/>值班人/群]
P --> O[处置闭环<br/>确认-处理-关闭]
三个关键点:
- 时间同步是前提:所有设备走 NTP,否则跨设备日志无法对齐,关联分析失效。
- 告警要有依据:阈值基于基线,不是拍脑袋;否则要么漏报要么刷屏。
- 抑制去重优先:同一根因的成百上千条告警要收敛成 1 条,否则值班人直接忽略。
二、参考采集架构
flowchart TB
subgraph 采集源
A1[路由器/交换机<br/>syslog + trap]
A2[防火墙/安全设备<br/>syslog]
A3[服务器/应用<br/>syslog]
end
subgraph 采集层
B1[rsyslog 集中器<br/>UDP 514/TCP 6514]
end
subgraph 分析层
C1[日志平台/ELK<br/>解析+关联+告警]
end
A1 & A2 & A3 -->|514/6514| B1 --> C1
配套 ASCII 日志流示意:
设备 ──syslog(UDP 514)──► rsyslog 集中器 ──► 日志平台 ──► 关联规则 ──► 告警
设备 ──SNMP trap(162)──► trap 接收器 ──────┘
│
时间同步(NTP 123) ◄─┘ ← 全链路统一时间戳
三、关键决策表
| 决策项 | 推荐取值 | 依据/常见错误 |
|---|---|---|
| syslog 传输协议 | 关键日志 TCP 6514,普通 UDP 514 | UDP 无连接易丢,关键日志用 TCP 保证送达 |
| 日志级别采集范围 | 0(emerg)~6(info) 全采,7(debug) 按需 | 全采 debug 会刷爆存储 |
| 时间同步 | NTP,偏差 <100ms | 时间不对齐,关联分析全部失效 |
| 日志留存 | ≥6 个月(合规最低要求) | 金融/等保可能要求更长 |
| 关键事件覆盖 | 链路 up/down、邻居变化、认证失败、配置变更 | 漏采关键事件=故障没告警 |
| 告警分级 | 紧急/重要/提示 三级 | 全设紧急=告警风暴 |
| 抑制去重 | 同源同因 5 分钟内合并为 1 条 | 不做抑制会被风暴淹没 |
| 通知渠道 | 紧急=电话/短信,重要=IM,提示=邮件/看板 | 提示级用电话=打扰 |
四、分步 SOP
- 盘点采集源:登记所有设备,确认 syslog/trap 已开启并指向集中器。
- 统一时间:全网 NTP,核对时区与偏差。
- 配置采集:rsyslog 集中器接收并落地,TCP/UDP 端口规划。
- 定义关键事件:明确哪些事件必须告警(链路/邻居/认证/配置变更)。
- 设定阈值与分级:基于基线设定,标注依据,三级分级。
- 配置关联与抑制:多源聚类、同因去重,避免风暴。
- 闭环处置:告警确认-处理-关闭,留存记录并复盘。
五、真实配置示例
设备侧 syslog 配置(华为 VRP)
info-center loghost 10.10.10.20 514
info-center source default channel 2 log level warning
info-center enable
设备侧 syslog 配置(思科 IOS-XE)
logging host 10.10.10.20 transport udp port 514
logging trap informational
logging source-interface Loopback0
ntp server 10.10.10.1
rsyslog 集中器(Linux)
# /etc/rsyslog.conf 片段:接收远端日志,按主机分文件
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="6514")
# 按主机名落地
$template RemoteLogs, "/var/log/network/%HOSTNAME%.log"
*.* ?RemoteLogs
SNMP trap 采集
# 思科:启用 SNMP trap
snmp-server community public RO
snmp-server host 10.10.10.30 version 2c public
snmp-server enable traps snmp linkdown linkup
# 华为:启用 trap
snmp-agent
snmp-agent trap enable
snmp-agent target-host trap address udp-domain 10.10.10.30 params securityname public
六、日志关联分析实战
把「单条日志」变成「可定位根因的证据链」,关键是用时间窗把多源事件聚在一起:
| 关联规则 | 时间窗 | 触发条件 | 结论 |
|---|---|---|---|
| 链路 down + OSPF 邻居变化 | 5 秒 | 同设备同时出现 | 链路故障引发路由收敛 |
| 认证失败风暴 | 1 分钟 | 同源 ≥5 次 | 疑似暴力破解 |
| 多台设备同时 linkDown | 10 秒 | ≥3 台 | 上游/汇聚/电源故障 |
| 高 CPU + 广播风暴 | 1 分钟 | 同时出现 | 环路或广播风暴 |
| 配置变更 + 业务异常 | 5 分钟 | 变更后随即异常 | 变更引入故障(头号线索) |
> 关联分析的正确率取决于时间对齐。若设备 NTP 偏差超过 1 秒,上述时间窗规则会全部失效——先修时间,再做关联。
七、验证方法
| 检查项 | 达标阈值 | 命令/方式 |
|---|---|---|
| 日志可收到 | 每设备日志都能到达集中器 | logger -n <host> "test" 验证 |
| 时间对齐 | 各设备时钟偏差 <100ms | show ntp status |
| 关键事件覆盖 | 链路 down/up 都有日志与告警 | 拔插线缆验证 |
| 告警分级 | 按三级路由正确 | 触发测试告警 |
| 抑制去重 | 风暴收敛为单条 | 模拟同因多告警 |
| 留存 | 日志保留 ≥6 个月 | 检查存储策略 |
八、常见故障排查表
| 现象 | 根因方向 | 首要动作 |
|---|---|---|
| 收不到日志 | 设备未指向集中器/端口不通 | show logging 查目标,抓包看 514 端口 |
| 日志时间错乱 | NTP 未同步/时区不一致 | show ntp status,统一时区 |
| 告警风暴 | 未做抑制去重/阈值过低 | 加抑制规则,回看阈值依据 |
| 关键事件漏报 | 级别过滤过高/trap 未启用 | 核对 logging trap 级别与 trap 开关 |
| 关联分析失效 | 时间不对齐/字段未解析 | 先修时间同步,再配字段解析 |
| 存储爆满 | debug 全采/留存无轮转 | 关闭 debug,配日志轮转 logrotate |
九、输出规范
交付时应产出:日志采集覆盖清单、关键事件与日志级别对照表、告警分级与通知矩阵、抑制去重规则、关联分析规则、处置闭环流程与复盘记录。
十、边界与风险
- syslog UDP 不可靠,关键日志必须 TCP 或本地缓存转发。
- 日志含敏感信息,需访问控制与脱敏。
- 时间不同步会让关联分析产生误导性结论。
- 本技能给出的是采集/分析框架与命令参考,具体阈值需按实际基线标定。
配套资源
- syslog/事件参数手册:
references/syslog-events-parameters.md - 采集配置对照:
references/log-collection-configs.md - 数据基线:
assets/syslog-level-source.csv - 关键事件模板:
assets/syslog-parse-template.txt - 脚本:
scripts/syslog_event_parser.py(syslog 关键事件解析) - 配套检查清单:《日志与告警分析清单》