5分钟搭建 Nginx 日志监控中心:轻量、开源、即开即用

👉 这是一个或许对你有用 的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:

👉这是一个或许对你有用的开源项目

国产Star破10w的开源项目,前端包括管理后台、微信小程序,后端支持单体、微服务架构

RBAC权限、数据权限、SaaS多租户、商城 、支付、工作流、大屏报表、ERP、CRMAI大模型、IoT物联网等功能:

【国内首批】支持 JDK17/21+SpringBoot3、JDK8/11+Spring Boot2双版本


服务器跑着,Nginx 每天生成一堆访问日志,但大部分时候没人去看。等出问题了才翻出来逐行 grepawktail -f,找个 IP 折腾半天。

nginxpulse 是一个轻量的 Nginx 访问日志分析面板------Docker 一条命令拉起来,自动解析日志,图表展示 PV/UV、IP 归属地、状态码分布、客户端占比。
nginxpulse Logo

为什么需要它

ELK 能力强但吃资源(内存至少几个 G),个人服务器扛不住。GoAccess 功能成熟但上手有门槛。Prometheus + Nginx Exporter 偏进程监控,对访问日志的分析维度有限。

nginxpulse 卡在中间位置:比 GoAccess 上手快,比 ELK 轻得多。适合不需要复杂日志管道、只想快速看清网站访问情况 的场景。

技术栈:Go(Gin) + Vue 3 + TypeScript + ECharts,数据库 PostgreSQL(1.5.3 后已从 SQLite 迁移),IP 归属地用 ip2region + ip-api.com。Docker 镜像内置 PostgreSQL,不用单独装。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

功能概览

PV / UV 统计 :首次启动解析全量历史日志入库,之后持续监听新日志。统计维度:总 PV、UV、QPS、响应时间分布。默认排除内网 IP。

IP 归属地 :先查本地 ip2region,查不到再请求 ip-api.com,结果缓存避免重复查询。页面偶尔显示"待解析"是正常的,后台任务还没跑完。

状态码分布 :2xx/3xx/4xx/5xx 占比一目了然。4xx 飙高 → 有人扫路径或资源链接挂了;5xx 高 → 应用层出问题。

客户端解析 :浏览器、操作系统、移动端/桌面端占比,个人站长可以指导移动端适配优先级。

实时流量 :当前请求实时滚动,适合压测时盯着看或发版时确认流量正常。

数据日报 :按天汇总,可对比不同日期的访问量变化。
nginxpulse 面板概览 nginxpulse 面板详情

移动端有 /m 入口,支持概览、日报、实时、日志四个页面。但首次初始化必须在电脑上完成。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

部署方式

Docker(最快)
go 复制代码
docker run -d --name nginxpulse \
  -p 8088:8088 \
  -v ./docker_local/logs:/share/logs:ro \
  -v ./docker_local/nginxpulse_data:/app/var/nginxpulse_data \
  -v ./docker_local/pgdata:/app/var/pgdata \
  -v ./docker_local/configs:/app/configs \
  -v /etc/localtime:/etc/localtime:ro \
  magiccoders/nginxpulse:latest
挂载路径 用途
/share/logs 日志目录(只读)
/app/var/nginxpulse_data 应用数据(必须挂载)
/app/var/pgdata PostgreSQL 数据(必须挂载)
/app/configs 配置文件持久化
/etc/localtime 同步宿主机时区

启动后访问 http://IP:8088时区一定要设置 ,否则日志时间解析偏差,统计数据全乱。

Docker Compose
go 复制代码
services:
  nginxpulse:
    image:magiccoders/nginxpulse:latest
    container_name:local_nginxpulse
    ports:
      -"8088:8088"
      -"8089:8089"
    volumes:
      -./docker_local/logs:/share/logs
      -./docker_local/nginxpulse_data:/app/var/nginxpulse_data
      -./docker_local/pgdata:/app/var/pgdata
      -./docker_local/configs:/app/configs
      -/etc/localtime:/etc/localtime
    stop_grace_period:90s
    restart:unless-stopped

stop_grace_period: 90s 不能省------内置 PostgreSQL 关闭时需要时间落盘,不给够会导致下次启动走恢复流程。

go 复制代码
docker compose up -d
单体二进制

从 GitHub Releases 下载,直接运行。1.5.3 后需自备 PostgreSQL,在配置文件里填 database.dsn

go 复制代码
TZ=Asia/Shanghai ./nginxpulse

多站点和压缩日志

一台服务器跑多个站点时,把日志目录整体挂进去,配置里分别指定:

go 复制代码
[
  {"name": "站点A", "logPath": "/share/log/nginx/access-site-a.log", "domains": ["a.example.com"]},
  {"name": "站点B", "logPath": "/share/log/nginx/access-site-b.log", "domains": ["b.example.com"]}
]

压缩日志直接支持,logPath 可指向 .gz 文件或通配符:

go 复制代码
{"logPath": "/share/log/nginx/access-*.log.gz"}

历史日志不用解压,直接拿来用。

权限踩坑

nginxpulse 默认以非 root 用户运行。容器内能否读日志、写数据,取决于宿主机目录权限。

go 复制代码
# 查看 UID/GID
ls -n /path/to/logs /path/to/nginxpulse_data

# 启动时传入
docker run ... -e PUID=1000 -e PGID=1000 ...

# 确保权限
chown -R 1000:1000 /path/to/nginxpulse_data /path/to/pgdata
chmod -R u+rx /path/to/logs

RHEL/CentOS/Fedora 开了 SELinux 的,volume 后面加 :z:Z

go 复制代码
-v /path/to/logs:/var/log/nginx:ro,Z

不要 chmod 777 ------只能临时排查用,不适合生产。

常见问题速查

问题 原因 解决
日志明细没内容 权限问题 检查容器内用户对日志文件的读权限
PV/UV 一直是 0 默认排除内网 IP PV_EXCLUDE_IPS 设为空,重新解析
日志时间不对 时区未同步 挂载 /etc/localtime,重新解析
数据会一直积累吗 有自动清理 logRetentionDays 清理,默认 30 天

和 GoAccess / ELK 怎么选

工具 优势 不足
nginxpulse Docker 一键部署、图表直观、资源占用低 功能比 ELK 少
GoAccess 成熟稳定、命令行高效 上手有门槛、Web 界面较朴素
ELK 能力最强、可查询任意维度 资源消耗极高、部署运维复杂
Prometheus + Grafana 监控生态完善 偏进程监控,日志分析维度有限

开源地址:https://github.com/likaia/nginxpulse

文档站点:https://nginx-pulse-docs.kaisir.cn/


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,"长按 "或"扫描"下方二维码噢

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

go 复制代码
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)