要在文本里找模式
日志巡检的目标不是把日志读一遍,而是在海量文本中找出偏离基线的模式。有效做法分三步:先定义基线,即正常时段的错误量级与常见条目;再按错误签名聚合,即去掉数字与变量后去重计数;最后看变化,比较环比与突增,而不是只判断关键字是否存在。
基本信息
| 基线来源 | 正常时段的错误量级与常见条目分布 |
|---|---|
| 聚合方式 | 错误签名去重,保留计数与首次出现时间 |
| 观察维度 | 量级变化、类型变化、出现位置变化 |
| 常见干扰 | 已知噪音、预期内的重试与限流记录 |
| 输出物 | 异常条目清单与影响面初步判断 |
典型使用场景
- 错误量突增:同一签名数量明显高于基线时触发检查,而不是等用户投诉
- 新签名出现:此前从未出现过的错误类型,通常对应配置或依赖变更
- 关联定位:多个服务同时出现同类错误,说明问题在共享依赖而非单点
- 发布核对:对比发布前后的签名分布,快速判断新版本是否引入问题
- 噪音治理:把长期存在的已知噪音加入白名单,避免淹没真实异常
模式判读要点
| 观察项 | 说明 | 典型含义 |
|---|---|---|
| 签名数量 | 去重后的错误类型数 | 突增说明出现了新的失败路径 |
| 单签名频次 | 同类错误出现的次数 | 快速上升说明持续劣化 |
| 首次出现时间 | 该签名最早出现时刻 | 与变更时间比对可定位诱因 |
| 分布偏移 | 错误集中在少数实例 | 指向实例级差异而非全局问题 |
按签名聚合而非逐行看
按签名聚合而非逐行看
# 先去数字与变量,把同类错误折叠成一个签名,再看计数
sed -E 's/[0-9]+/N/g' app.log | sort | uniq -c | sort -rn | head -20
# 与昨日基线比较,找出新增或明显放大的签名
diff <(cut -c8- baseline.txt) <(cut -c8- today.txt) | head -40
# 只看目标时间窗口内的错误级别,减少无关噪音干扰
awk '$0 ~ /ERROR|FATAL/ {print}' app.log | tail -200关键字匹配只能发现已知问题。把日志中的数字、路径与标识符归一化后按签名聚类,才能让从未预设的错误类型浮现出来,这也是日志巡检相对指标监控的主要优势。
日志扫描会产生额外磁盘读并可能带出敏感字段。大规模日志目录应在业务低谷扫描,同时限制输出内容,避免巡检结果本身泄露账号、令牌等凭据。