Nginx日志请求分布分析需按维度匹配图表:状态码用饼图看健康度,来源IP/Referer用柱状图排行,时间趋势用折线图查QPS波动,URL路径用表格+条形图识别热点资源,并注意字段类型、数据清洗与归一化。

用统计图表直观展示 Nginx 日志中的请求分布,关键在于选对维度、匹配图表类型,并确保数据已正确解析和索引。不需要写代码也能快速出图,但若要长期监控或深度分析,建议结合日志采集系统(如 Filebeat + ELK)或轻量工具(如 GoAccess)。
状态码分布:用饼图看服务健康度
HTTP 状态码是判断请求成败最直接的指标。4xx 表示客户端问题(如爬虫误配、链接失效),5xx 表示后端异常(如上游超时、服务崩溃)。
- 在 Kibana 的 Visualize 页面选择 Pie chart,数据源选已导入 Nginx 日志的索引
- Split Slices → Aggregation 选 “Count”,Bucket 选 “status” 字段(确保该字段为 keyword 类型)
- 预览后保存图表,可直接加入 Dashboard;若想突出错误,可加过滤条件 status: [400 TO 499] OR status: [500 TO 599]
- 命令行快速验证:用 awk '{print $9}' access.log | sort | uniq -c | sort -nr 查看原始分布
请求来源分布:用柱状图看 IP 或 Referer 排行
高频访问 IP 可能是真实用户、CDN 节点,也可能是恶意扫描;Referer 分布能反映流量来源质量(如自然搜索、外链、直接访问)。
- Kibana 中选 Vertical bar chart,X-axis 设为 remote_addr 或 referer,Aggregation 选 “Top values”,Size 设为 10
- 若 remote_addr 是代理 IP(如经过 CDN),需提前在 Logstash 或 Ingest Pipeline 中提取真实 IP(如从 x-forwarded-for)
- GoAccess 命令一键生成:goaccess /var/log/nginx/access.log --log-format=COMBINED -o report.html,内置 IP 和 Referer 柱状图
- 注意归一化:Referer 为空时统一标为 “Direct”,避免大量空值干扰排序
时间趋势分布:用折线图看 QPS 波动
按分钟或小时聚合请求量,能发现业务高峰、定时任务影响、突发攻击等规律。
- Kibana 中选 Line chart,X-axis 选 @timestamp(需设为 date 类型),Y-axis 选 “Count”
- 在 X-axis 设置 Interval(如 “Auto” 或 “1h”),时间范围建议选最近 24 小时或 7 天
- Python 快速绘图:用 pandas 按 hour 分组统计,再用 seaborn 绘制带标记的折线图,适合临时排查
- 若发现突增,可联动查看对应时段的状态码分布或 URL TOP10,快速定位是否为某接口被刷
URL 路径分布:用表格+条形图看热点资源
热门 URL 能反映用户行为重点,但需排除静态资源(js/css/img)并做路径参数归一化(如 /user/123 → /user/:id)。
- Kibana 中用 Terms 聚合 url 字段,配合 Scripted Field 或 Painless 脚本清洗路径(如正则替换数字为 :id)
- 在 Dashboard 中添加 Top N 表格,同时配一个 horizontal bar chart 展示前 10,视觉更清晰
- 日志中若含埋点参数(如 ?channel=weixin&event=pageview),可单独提取 channel 字段做分渠道 PV 统计
- 注意:url 字段默认可能被截断或设为 text 类型,需在 Index Settings 中确认 mapping 是否支持聚合

















