告别逐行翻日志!这款神器一键可视化解析 Nginx 日志!

大家好,我是 Java陈序员

对于运维人员、站长来说,Nginx 日志是分析网站访问情况的核心,但逐行翻阅、手动统计 PV/UV、排查 IP 归属地的过程,耗时又费力。尤其是多站点部署时,不同日志文件切换、数据零散的问题,更是让人效率大打折扣。

今天,给大家推荐一款开源的轻量级 Nginx 日志分析可视化面板,告别逐行翻日志!

关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。

项目介绍

nginxpulse —— 一款轻量级 Nginx 访问日志分析与可视化面板,提供实时统计、PV 过滤、IP 归属地与客户端解析。

功能特色

  • 轻量化部署:支持 Docker 部署,无需搭建复杂依赖环境,基于 Go 语言开发,后端高性能低消耗,搭配 SQLite 轻量化数据库,无需额外部署数据库服务
  • 多维度日志分析:支持同时挂载多个 Nginx 日志文件,自动统计 PV/UV、访问频次、请求状态码、客户端(浏览器/设备)、访问时段等维度数据
  • 智能 IP 解析:IP 归属地按地域分类展示,可快速定位异常访问 IP、高频访问区域
  • 灵活适配:支持适配非标准 Nginx 日志格式,只需调整解析规则配置,无需修改代码,还适配 Caddy 服务器日志解析,一站式搞定多类 Web 服务器日志分析

技术栈

  • 后端Go + SQLite + Ip2Region
  • 前端Vue3 + Vite + TypeScript

快速上手

Docker 部署

1、拉取镜像

docker pull magiccoders/nginxpulse:latest

2、创建挂载目录

mkdir -p /data/software/nginxpulse

3、运行容器

docker run -d --name nginxpulse \
  -p 8088:8088 \
  -p 8089:8089 \
  -e WEBSITES='[{"name":"Java陈序员","logPath":"/share/log/nginx/access.log","domains":["chencoding.top","chencoding.top"]}]' \
  -e ACCESS_KEYS='["key-1","key-2"]' \
  -v /data/software/nginx/access.log:/share/log/nginx/access.log:ro \
  -v /data/software/nginxpulse:/app/var/nginxpulse_data \
  magiccoders/nginxpulse:latest

参数说明

  • 8088:前端访问端口
  • 8088:后端访问端口
  • -e WEBSITES:指定网站列表的 JSON 数组,字段:namelogPathdomains(可选)
  • -e ACCESS_KEYS:访问密钥列表,为非空数组时,访问 UI 和 API 都需要提供密钥

4、浏览器访问

http://{IP/域名}:8088

Docker Compose 部署

1、创建 docker-compose.yml 文件,并写入如下内容:

version: "3.8"
services:
  nginxpulse:
    image: magiccoders/nginxpulse:latest
    container_name: nginxpulse
    ports:
      - "8088:8088"
      - "8089:8089"
    environment:
      WEBSITES: '[{"name":"Java陈序员","logPath":"/share/log/nginx/access.log","domains":["chencoding.top","chencoding.top"]}]'
      ACCESS_KEYS: '["key-1","key-2"]'
    volumes:
      - /data/software/nginx/access.log:/share/log/nginx/access.log:ro
      - /data/software/nginxpulse:/app/var/nginxpulse_data
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped

2、启动运行

docker compose up -d

日志文件挂载

  • 多日志文件挂载

WEBSITES 的值是个数组,参数对象中传入网站名、网址、日志路径。例如:

environment:
  WEBSITES: '[{"name":"网站1","logPath":"/share/log/nginx/access-site1.log","domains":["www.kaisir.cn","kaisir.cn"]}, {"name":"网站2","logPath":"/share/log/nginx/access-site2.log","domains":["home.kaisir.cn"]}]'
volumes:
  - ./nginx_data/logs/site1/access.log:/share/log/nginx/access-site1.log:ro
  - ./nginx_data/logs/site2/access.log:/share/log/nginx/access-site2.log:ro
  • 日志目录挂载

如果有很多个网站要分析,可以考虑将日志目录整体挂载进去,然后在 WEBSITES 里去指定具体的日志文件即可。例如:

environment:
  WEBSITES: '[{"name":"网站1","logPath":"/share/log/nginx/access-site1.log","domains":["www.kaisir.cn","kaisir.cn"]}, {"name":"网站2","logPath":"/share/log/nginx/access-site2.log","domains":["home.kaisir.cn"]}]'
volumes:
  - ./nginx_data/logs:/share/log/nginx/
  • 压缩日志(.gz)挂载

nginxpulse 还支持直接解析 .gz 压缩日志,logPath 可指向单个 .gz 文件或使用通配符。例如:

{"logPath": "/share/log/nginx/access-*.log.gz"}

功能体验

  • 概况

  • 数据日报

  • 实时

  • 访问明细

不管是个人站长、中小企业运维,还是个人开发,nginxpulse 都能帮你告别繁琐的日志分析,用最简单的方式掌握网站访问数据。快去试试吧~

项目地址:https://github.com/likaia/nginxpulse

最后

推荐的开源项目已经收录到 GitHub 项目,欢迎 Star

https://github.com/chenyl8848/great-open-source-project

或者访问网站,进行在线浏览:

https://chencoding.top:8090/#/

我创建了一个开源项目交流群,方便大家在群里交流、讨论开源项目

但是任何人在群里打任何广告,都会被 T 掉

如果你对这个交流群感兴趣或者在使用开源项目中遇到问题,可以通过如下方式进群

关注微信公众号:【Java陈序员】,回复【开源项目交流群】进群,或者通过公众号下方的菜单添加个人微信,并备注【开源项目交流群】,通过后拉你进群

大家的点赞、收藏和评论都是对作者的支持,如文章对你有帮助还请点赞转发支持下,谢谢!


posted @ 2026-02-06 09:21  Java陈序员  阅读(12)  评论(0)    收藏  举报