核心内容摘要
当爱化作一口鲜甜:孩子喂妈妈吃萝卜的温馨故事
搞运维或者自己折腾服务器的朋友应该都有这个需求想看看自己网站的访问情况。
之前试过 GoAccess、ELK 那一套要么配置麻烦要么太重量级。
最近发现了一个叫 NginxPulse 的项目用下来感觉还不错分享给大家。
这是啥一句话轻量级的 Nginx 日志分析面板。
能干啥实时看 PV/UV 数据IP 归属地查询国内用 ip2region 本地库国外走 ip-api客户端/浏览器解析支持多站点支持自定义日志格式看下效果图技术栈后端是 Go Gin前端是 Vue3 Vite PrimeVue数据库就一个 SQLite够轻量。
IP 归属地这块挺聪明的先查内存缓存然后走远程 API 批量查失败了再用本地 ip2region 兜底。
既保证速度又保证准确率。
怎么跑起来Docker 一把梭最简单的方式一行命令搞定docker run -d --name nginxpulse \ -p 8088:8088 \ -p 8089:8089 \ -e WEBSITES[{name:主站,logPath:/share/log/nginx/access.log,domains:[example.com]}] \ -v /your/nginx/logs/access.log:/share/log/nginx/access.log:ro \ -v $(pwd)/var/nginxpulse_data:/app/var/nginxpulse_data \ magiccoders/nginxpulse:latest把/your/nginx/logs/access.log换成你自己的日志路径就行。
Docker Compose如果喜欢 compose也行version:
8 services: nginxpulse: image:magiccoders/nginxpulse:latest container_name:nginxpulse ports: -8088:8088 -8089:8089 environment: WEBSITES:[{name:主站,logPath:/share/log/nginx/access.log,domains:[example.com]}] volumes: -./nginx_logs/access.log:/share/log/nginx/access.log:ro -./var/nginxpulse_data:/app/var/nginxpulse_data restart:unless-stopped跑起来之后前端面板http://localhost:8088后端 APIhttp://localhost:8089多网站怎么配如果你有多个站点WEBSITES传数组就行WEBSITES[ {name:主站,logPath:/logs/main.log,domains:[www.example.com]}, {name:博客,logPath:/logs/blog.log,domains:[blog.example.com]} ]日志按天切割的话支持通配符{logPath: /logs/access-*.log}.gz压缩日志也能直接解析不用手动解压。
几个实用功能
远端日志拉取日志不在本机没关系支持 SFTP、HTTP、S3/OSS 三种方式拉取远端日志。
比如 SFTP{ id: sftp-main, type: sftp, host:
1.
2.
4, port: 22, user: nginx, auth: { keyFile: /secrets/id_rsa }, path: /var/log/nginx/access.log }
Push Agent如果服务器在内网或者边缘节点可以用 Agent 主动推送日志。
在日志服务器上跑一个轻量 agent实时把日志推到 NginxPulse 主服务。
自定义日志格式不是默认的 combined 格式可以自定义。
支持两种方式方式一直接写 log_format 语法{ logFormat: $remote_addr - $remote_user [$time_local] \$request\ $status $body_bytes_sent }方式二正则命名分组{ logRegex: ^(?Pip\\S) - (?Puser\\S) \\[(?Ptime[^\\]])\\]... }
Caddy 也支持用 Caddy 的朋友也能用配置logType: caddy就行会按 JSON 格式解析。
访问控制生产环境可以加个密钥ACCESS_KEYS[your-secret-key]访问时需要带上X-NginxPulse-Key请求头前端会自动弹窗让你输入。
常见问题Q跑起来后日志明细是空的A多半是权限问题。
给日志目录和数据目录加个权限chmod -R 777 /path/to/logs /path/to/nginxpulse_dataQ有访问但是 PV/UV 都是 0A默认排除内网 IP。
如果想统计内网流量把PV_EXCLUDE_IPS设成空数组PV_EXCLUDE_IPS[]单体部署如果不想用 Docker可以构建成单个可执行文件./scripts/build_single.sh会生成一个内置前端的二进制文件直接运行就能同时提供前后端服务。
支持 amd64 和 arm64。
最后GitHub 地址https://github.com/likaia/nginxpulse在线演示https://nginx-pulse.kaisir.cn/目前
4k starMIT 协议可以放心用。
如果你也在找 Nginx 日志分析工具可以试试这个。
比起重量级的 ELK 或者纯命令行的 GoAccess这个算是个不错的中间选择。