热力图是用颜色深浅直观表示访问密度或错误集中度的分析手段,分为地域热力图(ip映射省份/国家,用于评估cdn覆盖与区域稳定性)和页面路径热力图(url路径聚合访问/错误频次,识别热门接口或异常路径)。

热力图不是一张“好看的地图”,而是把访问密度或错误集中度用颜色深浅直观标出来的分析手段。Nginx 日志本身不带地理坐标或页面层级结构,要生成有意义的热力图,关键在两个方向:一是按地域(IP → 省份/国家)映射请求分布,二是按 URL 路径聚合访问或错误频次——后者常被称作“页面热力图”,实际是路径热度图。
地域热力图:看用户从哪来、错在哪
它反映的是请求来源的空间分布,适合评估 CDN 覆盖、区域服务稳定性或本地化运营效果。
- 必须先解析真实客户端 IP:若走 CDN 或反向代理,$remote_addr 是代理地址,需改用 $http_x_forwarded_for 并配置
set_real_ip_from保证可信链路 - 用 GeoLite2-City.mmdb 库将 IP 映射为省份或国家字段(如
ip_to_province(remote_addr)),免费版通常只支持省级精度 - 统计各区域请求数量后,在 Kibana 地图可视化中选择 Region Map,字段选 province 或 country_name;错误分布可叠加过滤条件
status >= 400,再用颜色梯度区分错误密度 - 阿里云 SLS 示例语句:
* | select count(1) as pv, ip_to_province(remote_addr) as province group by province order by pv desc limit 50
页面路径热力图:识别高频访问与异常聚集
这不是地理图,而是以 URL 路径为横轴、请求数/错误数为纵轴的二维热度分布,常用于发现热门接口、404 集中页或 5xx 高发路径。
- 从 $request 字段提取路径(如
GET /api/order/list HTTP/1.1 → /api/order/list),建议统一去除查询参数,避免同资源因参数不同被拆散 - 按路径分组计数时,排除干扰项:健康检查(
/healthz)、静态资源(.js,.css,.png)和爬虫 UA 的请求,否则会掩盖真实业务热点 - Kibana 中可用 Trellis bar chart 或自定义 Canvas,X 轴设为
request_path(需提前在 Ingest Pipeline 中提取),Y 轴为 Count;再加一层status拆分,就能看出哪些路径既热门又错误多 - 命令行快速验证 Top 错误路径:
awk '$9 >= 400 {print $7}' access.log | sort | uniq -c | sort -nr | head -10
让热力图真正反映问题,而不是制造幻觉
颜色越深≠越重要,要看上下文。同一片红色区域,可能是大促流量涌入,也可能是某省 DNS 故障导致重试风暴。
- 叠加时间维度:对比工作日与凌晨的地域热力变化,能识别定时任务或扫描行为;用 Kibana 的 time filter 切片,再刷新地图即可
- 关联 Referer 和 User-Agent:某省 404 高发,若 Referer 多为微信内嵌页,可能说明小程序跳转链接失效;若 User-Agent 集中为 Python-urllib,则大概率是脚本误配
- 排除已知爬虫网段:在 Logstash 或 SLS 中预过滤主流扫描器 IP 段(如 185.191.171.*),避免热力被非用户流量主导
- 不要只看总量:对高 PV 路径,额外计算错误率(
error_count / total_count),比单纯计数更能定位脆弱点











