开发了一个 nginx 日志分析面板
前言
最近在优化网站访问链路的过程中,部署了一套 WAF 防火墙,它大部分功能都做的挺好,美中不足的地方就是针对于网站访客的相关功能需要付费( 3600 元/年)才能用。
付费是不可能付费的,找了一圈 nginx 日志分析的开源项目,大部分都做的挺简陋的,要么就是做的很重,需要部署其他服务。
既然找不到合适的,那就自己动手写一个吧!
如果看不到图片的话,直接访问我个人网站上发布的。https://www.kaisir.cn/post/186
实现效果
做了 4 个模块对日志数据进行分析。
- 访问概况
- 数据日报
- 实时访问
- 访问明细

访问概况
概况模块中,做了 8 个维度的数据分析。
核心指标
在这个维度中,针对 http 状态码、浏览量、访客数、会话数做了更细致的划分。

每一个划分中,在详情面板里,都可以看到这个访客在什么时间做了什么事情。




趋势分析 & 新老访客
这一部分可以看到每天的访问趋势以及当天与前一天的新老访客占比。

来路、受访页、入口页
这部分可以看到访客的来源,以及每个路径的访问次数。

地域 & 终端设备
这部分可以看到每个省份的访问情况以及访问设备的分布情况。

数据日报
在这个模块中,可以看到每天的浏览量、访客数、平均访问时长等信息。


实时访问
在这个模块里,可以查看最近 5/15/30 分钟内的访问情况

访问明细
这个模块就以表格的形式展示每一条日志。

如何使用
为了方便使用,我已经将这个项目打包成镜像发布到 dockerhub 上了,镜像名为magiccoders/nginxpulse,可以通过 docker 的形式使用,也可以通过 docker compose 的形式使用。
需要传入的参数:
- WEBSITES 它的值是个数组,一个对象就是一个网站,需要传入网站名、日志路径、网址(或者内网 ip ,主要用于站内/站外的区分)
- ports 端口映射,容器内暴露出来的端口是 8088
- volumes 文件挂载,这里需要挂载:日志文件、容器内产生的数据文件、时区
此处我以 docker compose 的形式举例:
version: "3"
services:
nginxpulse:
image: magiccoders/nginxpulse:latest
container_name: local_nginxpulse
ports:
- "9200:8088"
environment:
WEBSITES: '[{"name":"神奇的程序员","logPath":"/var/log/nginx/access.log","domains":["kaisir.cn","www.kaisir.cn"]}]' #domains 用于“来源( referer )统计”的站内/站外分类
PV_EXCLUDE_IPS: '["127.0.0.1", "::1", "10.10.0.1", "192.168.30.21"]' #pv 统计时需要排除的 ip
volumes:
- ./nginx_data/logs/all/access.log:/var/log/nginx/access.log
- ./nginxpulse_data:/app/nginxpulse_data
- /etc/localtime:/etc/localtime
restart: unless-stopped
写在最后
至此,文章就分享完毕了。
我是神奇的程序员,一位前端开发工程师。
如果你对我感兴趣,请移步我的个人网站,进一步了解。
@4ark 晚点开源,现在代码写的比较乱,我得先整理下
@NouveauNom 可以,我晚点看看
我们是日志发到日志服务器里,grafana 加个数据源,要啥自己弄就完事。
@renchong 就雷池😂
建议加入一个查看 url 记录,请求时长,包体,请求内容。就像抓包软件那样,可以方便排查接口问题,哪里卡了之类的。之前见某家的 cdn 有这个功能。很强。后面自己找没找到合适的。