网站日志怎么看?access.log 关键字段与异常识别

来源:互联网 时间:2026-09-29

服务器上最不缺的就是日志,最容易被忽略的也是日志。网站日志怎么看,很多人打开文件看到密密麻麻一行行就关掉了,其实 access.log 的每条记录都是固定格式,字段含义固定,看懂六七个位置就能办大事:谁访问的、什么时候、要了什么、拿到了什么结果。

一条 access.log 记录由哪些字段组成

nginx 默认用 combined 格式记录,一行里依次是:客户端 IP、访问时间、请求方法和路径、HTTP 协议版本、状态码、返回字节数、来源页面、浏览器标识。每一段之间用空格或引号分隔,位置是固定的。下面这段先是 nginx 配置里的格式定义,后面附一条真实样例。要改的是 log_format 里要加的字段,加完之后记得同步检查 access_log 指令有没有引用到这个格式名,否则新字段不会出现在日志里。

# nginx.conf 中的日志格式定义

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent"';

access_log /var/log/nginx/access.log main;

# 一条样例记录(各字段位置固定)

203.0.113.5 - - [13/Sep/2026:10:22:31 +0800] "GET /article/12.html HTTP/1.1" 200 5321 "https://www.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)

状态码告诉你哪里出了问题

状态码是日志里信息量最大的一个字段。2xx 是正常;301 和 302 是跳转,配置了 HTTPS 或换域名后会大量出现;403 表示服务器拒绝,可能是权限问题也可能是你封了对方;404 表示请求的资源不存在;499 是 nginx 特有的,指客户端在服务端返回前主动断开,用户等不及关掉了页面;5xx 是服务端错误,500 多为程序报错,502 表示后端进程没起来或崩了,504 表示后端处理超时。看到 5xx 先确认后端服务是否存活,看到大量 4xx 先查是不是死链或者被人扫描。

# 按状态码统计当天各类响应各有多少条

awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn

# 单独看服务端错误,5xx 是必须马上处理的一类

grep -E ' (50[0-9]|499) ' /var/log/nginx/access.log | tail -50

按 IP、URL、UA 聚合,异常一眼可见

单看一行没感觉,把同样的字段聚起来统计,规律立刻浮现。三个最常用的聚合角度:按客户端 IP 看谁的请求量最大,单个 IP 一天上千次基本可以断定是采集或攻击;按 URL 看哪个页面被请求最多,能反映出热点内容和被反复抓取的接口;按浏览器标识看有没有异常的 UA,空 UA、明显的脚本 UA、伪造的爬虫名都值得警惕。下面这三条命令分别做完这三件事,跑完把结果和你的正常值比一比。

# 访问量前十的 IP

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head

# 最常被请求的 URL

awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head

# 出现最多的客户端标识

awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head

日志轮转与保留策略

日志文件会一直增长,不轮转迟早把磁盘写满,而磁盘满会连累 MySQL 和 PHP 一起起不来,这是最冤的一类故障。用系统自带的 logrotate 每天切分一次,保留最近十四份并压缩,能省下大量空间。下面这份配置放到 /etc/logrotate.d/nginx 下即可,要改的是 rotate 的保留份数和 daily 的频率,流量大的站可以改成 hourly 加更小的单文件。配置里那行 kill -USR1 是让 nginx 重新打开日志文件,不加的话切分后 nginx 还在往旧文件写。

/var/log/nginx/*.log {

daily

rotate 14

compress

delaycompress

missingok

notifempty

sharedscripts

postrotate

[ -f /run/nginx.pid ] && kill -USR1 $(cat /run/nginx.pid)

endscript

}

日志不是写给搜索引擎看的,是写给你自己看的。把它当成一台行车记录仪,平时不用盯着,出事之后能原样回放。每周花十分钟扫一遍 5xx 和 Top IP,很多问题能在爆发前发现。

相关阅读:

《日志一天几十万行不知道看什么?盯住这几类记录就够》

《Linux服务器常用命令速查:运维高频操作一页搞定》

《nginx配置详解:反向代理、缓存与伪静态的常用写法》

相关文章

A5创业网 版权所有

返回顶部