LabHub
学习 学习路径 课程

Linux 基础

从日志里把答案抠出来

在 LabHub 中继续学习

目标

练习把针对日志文件的问题转化为命令。/opt/lab/data/app.log 采用 IP 날짜 메서드 경로 상태코드 [ERROR] 格式,共 480 行。

为什么重要

发生故障时,真正需要的不是日志查看器,而是把问题转化成管道的能力。‘什么出现得最多’这类问题,几乎总能用 sort | uniq -c | sort -rn | head 这一固定模式回答。uniq -c 只能统计相邻的重复项,因此前面的 sort 必不可少;管道连接的各条命令在独立进程中同时流式处理,所以即使是巨大文件,也不必整体载入内存。这两点正是该模式速度快的原因。

步骤

  1. 统计包含 ERROR 的行数,只把数字写入 /root/error_count.txt
  2. 把出现次数最多的一个 IP 写入 /root/top_ip.txt
  3. 仅将状态码为 500 的整行原样保存到 /root/five_hundreds.txt
  4. 把出现过的唯一不同路径(第 4 个字段)逐行保存到 /root/paths.txt
  5. 코드 개수 格式统计各状态码数量,以代码升序排列 3 行,保存到 /root/status_counts.txt
  6. 把请求数最多的 3 个路径按 경로 개수 格式、数量降序排列 3 行,保存到 /root/top3_paths.txt
  7. 计算非 200 响应的比例,保留一位小数且不带 % 符号,写入 /root/error_rate.txt
  8. /root/report.txt 中按以下顺序创建三行。
    • total=<전체 줄 수>
    • errors=<200 이 아닌 줄 수>
    • top_path=<가장 많이 요청된 경로>

提示

统计 ERROR 行数

统计包含 ERROR 的行数,只把数字写入 /root/error_count.txt

用管道连接筛选工具和计数工具。grep 也有只统计数量的选项。

请求次数最多的 IP

把出现次数最多的一个 IP 写入 /root/top_ip.txt

提取第一个字段,再依次连接 sort | uniq -c | sort -rn。uniq -c 只能统计相邻的重复项。

仅提取 500 响应

仅将状态码为 500 的整行原样保存到 /root/five_hundreds.txt

状态码是第 5 个字段。如果只用 grep 匹配字符串,其他字段中包含 500 的行也可能被选中。

唯一不同路径列表

把出现过的唯一不同路径(第 4 个字段)逐行保存到 /root/paths.txt

路径是第 4 个字段。sort 本身就有去重选项。

按状态码汇总

코드 개수 格式统计各状态码数量,以代码升序排列 3 行,保存到 /root/status_counts.txt

以‘代码 数量’格式按代码升序输出 3 行。可以使用 awk 的关联数组和 END 块,也可以组合 sort|uniq -c。

请求最多的 3 个路径

把请求数最多的 3 个路径按 경로 개수 格式、数量降序排列 3 行,保存到 /root/top3_paths.txt

格式为‘路径 数量’。uniq -c 的输出顺序是‘数量 值’,因此最后需要调换顺序。

计算错误率

计算非 200 响应的比例,保留一位小数且不带 % 符号,写入 /root/error_rate.txt

需要总行数和非 200 行数。在 awk 的 END 块中一次计算,就不必读取文件两遍。

创建摘要报告

/root/report.txt 中按以下顺序创建三行。

把前面步骤得到的值合并成三行。格式和顺序必须准确。