光年网站采用标准Nginx日志格式,每行日志包含以下字段:
| 字段名 | 示例值 | 含义 |
|————–|———————|————————–|
| IP地址 | 192.168.1.100 | 用户真实IP(含代理穿透) |
| 时间戳 | [12/Mar/2023:09:15] | 请求到达服务器的UTC时间 |
| 请求方法 | GET /index.html | HTTP方法和目标路径 |
| 状态码 | 200 | 服务器响应状态 |
| 响应大小 | 1024 | 返回内容字节数(含Header)|
| 引荐来源 | “google.com” | 流量来源域名 |
| 用户代理 | “Chrome 112.0” | 客户端设备信息 |
状态码类型 | 示例 | 业务含义 |
---|---|---|
成功 | 200 | 正常请求 |
重定向 | 302 | 临时跳转(如未www强制跳转) |
客户端错误 | 404 | 资源不存在 |
服务端错误 | 500 | 服务器内部错误 |
# 使用Python+Pandas计算小时级流量分布 import pandas as pd # 加载日志数据 df = pd.read_csv('access.log', sep='s+', names=["ip","time","method","url","status","size","refer","ua"], converters={'time': lambda x: pd.to_datetime(x, format='[%d/%b/%Y:%H:%M:%S]')}) # 按小时聚合请求量 hourly_traffic = df.set_index('time').resample('H').size() print(hourly_traffic)
排名 | 路径 | 访问量 | 占比 |
---|---|---|---|
1 | /index.html | 38,500 | 1% |
2 | /product.php | 25,800 | 5% |
3 | /api/v1/data | 18,700 | 6% |
4 | /about.html | 12,300 | 3% |
5 | /contact.php | 9,500 | 0% |
用户类型 | 判定标准 | 访问量 | 占比 |
---|---|---|---|
新用户 | 首次访问且无cookie记录 | 45,000 | 3% |
老用户 | 7天内重复访问或有cookie | 29,700 | 7% |
graph TD A[首页] --> B[产品页] B --> C{登录?} C -是 --> D[个人中心] C -否 --> E[购物车] E --> F[支付页] F --> G[订单完成]
错误类型 | 发生次数 | 典型案例 |
---|---|---|
静态资源404 | 1,280 | /images/logo-2x.png(路径错误) |
API超时 | 320 | /api/v1/checkout(数据库锁等待) |
SSL握手失败 | 150 | 客户端TLS1.0协议禁用导致 |
通过响应时间分布发现:
<200ms
完成>2s
集中在/api/v1/report
接口SELECT ip, COUNT() AS hits FROM access_log WHERE TIMESTAMP > NOW() INTERVAL '1 hour' GROUP BY ip HAVING hits > 100;
检测结果:发现51.100.38
在1小时内发起153次请求,触发WAF拦截规则。
操作类型 | 触发条件 | 最近记录时间 |
---|---|---|
后台登录 | /admin/login 访问 | 2023-03-12 14:21 |
文件上传 | Content-Type 含multipart | 2023-03-12 15:07 |
SQL注入 | ' OR 1=1 出现在参数 | 2023-03-12 15:12 |
Q1:如何识别爬虫流量与真实用户?
Python-urllib
、Mozilla/5.0 (compatible)
等标识robots.txt
引导爬虫Baiduspider
外的非搜索引擎UA)limit_req
模块)Q2:如何优化API响应时间过长的问题?
EXPLAIN
分析慢查询,建立索引优化查询计划LRU
淘汰策略)p99
响应时间,目标控制在<300ms