LabHub
开始
学习 学习路径 课程

从日志里找原因

从访问日志里找出事故时刻

在 LabHub 中继续学习

目标

从一份 1269 行的访问日志中,在 10 分钟内找出事故时间和问题路径,并将激增幅度与日常基线比较,用数字描述。

为什么重要

“有 103 个错误”不算信息。如果平时只有 5 个,就很严重;如果平时有 120 个,反而说明有所改善。因此,日志分析不是从寻找原因开始,而是从建立基线开始。陌生客户通常没有基线文档,所以必须从同一份日志中建立:排除事故区间后的其余部分就是日常基线。

还必须分别查看 4xx 和 5xx。4xx 表示客户端发送错误,5xx 表示服务器发生故障,两类数值是同步变化还是各自变化,会指明原因方向。部署后如果只有 4xx 增加,说明 API 契约发生变化;如果只有 5xx 增加,则说明内部系统出现故障。

/opt/data/web.log 的格式是以空格分隔的五个字段。

10.9.4.21 04:52:15 GET /api/pay 200
IP        시각      메서드 경로     상태코드

步骤

  1. 创建 /root/incident 目录。
  2. 将状态码为 500 的请求总数写入 /root/incident/total_500.txt。
  3. 将状态码为 404 的请求总数写入 /root/incident/total_404.txt。
  4. 找出 500 出现次数最多的分钟,以 HH:MM 格式写入 /root/incident/peak_minute.txt。
  5. 将 500 出现次数最多的路径写入 /root/incident/endpoint.txt。
  6. 将该峰值一分钟内发生的 500 数量写入 /root/incident/peak_count.txt。
  7. 将排除峰值分钟后其余时间段的 500 数量写入 /root/incident/baseline.txt。
  8. 在 /root/incident/summary.txt 中编写包含上述四个值的摘要。

参考

创建工作目录

创建 /root/incident 目录。

将分析结果集中放在 /root/incident 下。

统计 500 总数

将状态码为 500 的请求总数写入 /root/incident/total_500.txt。

web.log 的最后一个字段是状态码。使用 awk 只统计该字段为 500 的行。

统计 404 总数

将状态码为 404 的请求总数写入 /root/incident/total_404.txt。

4xx 与 5xx 的原因不同。要判断它们是同步变化还是各自变化,必须分别统计。

找出事故时间

找出 500 出现次数最多的分钟,以 HH:MM 格式写入 /root/incident/peak_minute.txt。

第二个字段是 HH:MM:SS。只截取前 5 个字符,找出 500 最集中的分钟。

找出问题路径

将 500 出现次数最多的路径写入 /root/incident/endpoint.txt。

只选择状态码为 500 的行,查看第四个字段的分布。判断错误是集中在一个路径还是分散出现。

统计峰值分钟的错误数

将该峰值一分钟内发生的 500 数量写入 /root/incident/peak_count.txt。

统计只在该一分钟内出现了多少个 500。直接利用前一步的结果。

计算日常错误量

将排除峰值分钟后其余时间段的 500 数量写入 /root/incident/baseline.txt。

这是排除峰值分钟后其余时间段的 500 数量。用总数减去峰值即可。

创建分析摘要

在 /root/incident/summary.txt 中编写包含上述四个值的摘要。

将 500 总数、事故时间、问题路径和日常基线四项集中到一个文件中。