直接看状态码分布就能掌握错误趋势,重点是快速聚合、对比、定位异常波动;apache日志中4xx/5xx错误码位于第9字段,可用awk提取统计、按时间过滤、关联路径及referer/user-agent分析根因。

直接看状态码分布,就能掌握错误趋势。重点不是逐条翻日志,而是快速聚合、对比、定位异常波动。
Apache 访问日志中错误状态码的识别与提取
错误状态码主要指 4xx(客户端问题)和 5xx(服务端问题),常见有:
-
400(坏请求)、401(未授权)、403(禁止访问)、404(资源不存在)、410(已删除) -
500(内部服务器错误)、502(网关错误)、503(服务不可用)、504(网关超时)
这些数字都出现在日志行的第 9 字段(默认 Combined 或 Common 格式下)。确认方法:取一行日志,按空格分割,数到第 9 项是否为三位数状态码。
统计错误状态码频次与时间分布
用一条命令即可汇总当前日志中的错误占比:
awk '$9 ~ /^4[0-9]{2}|^5[0-9]{2}$/ {print $9}' /var/log/httpd/access_log | sort | uniq -c | sort -nr
输出类似:
1823 404
412 500
107 403
32 503
若想加时间维度(比如看最近一小时的 5xx 暴增),可结合 awk 时间过滤:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
awk -v start="`date -d '1 hour ago' '+%d/%b/%Y:%H'`" \
'$4 ~ /\[.*start/ && $9 ~ /^5[0-9]{2}$/ {count++} END {print count+0}' /var/log/httpd/access_log
关联错误路径与高频错误源
光知道“500 多”不够,得知道是哪个接口或脚本反复出错:
awk '$9 == "500" {print $7}' /var/log/httpd/access_log | sort | uniq -c | sort -nr | head -10
其中 $7 是请求路径(如 /api/user/login.php),结果能直指问题模块。
同理,对 404 可查缺失资源:
awk '$9 == "404" {print $7}' /var/log/httpd/access_log | sort | uniq -c | sort -nr | head -5
常暴露死链、迁移遗漏或爬虫暴力探测路径。
结合 Referer 和 User-Agent 判断异常模式
例如大量 403 来自同一 IP + 特定 UA,可能是扫描工具:
awk '$9 == "403" {print $1, $11, $12}' /var/log/httpd/access_log | head -10
字段 $11 是 Referer,$12 是 User-Agent。若发现 sqlmap、dirbuster 或无 Referer + 空 UA 的批量请求,基本可判定为恶意探测。
不复杂但容易忽略










