社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

终于找到一个好用的 Nginx 日志分析工具了

小哈学Java • 5 月前 • 180 次点击  

来源:juejin.cn/post/7597080391880343562

  • 这是啥?
  • 技术栈
  • 怎么跑起来
    • Docker 一把梭
    • Docker Compose
  • 多网站怎么配?
  • 几个实用功能
    • 1.远端日志拉取
    • 2.Push Agent
    • 3.自定义日志格式
    • 4.Caddy 也支持
    • 5.访问控制
  • 常见问题
  • 单体部署
  • 最后

搞运维或者自己折腾服务器的朋友应该都有这个需求:想看看自己网站的访问情况。

之前试过 GoAccess、ELK 那一套,要么配置麻烦,要么太重量级。最近发现了一个叫 NginxPulse 的项目,用下来感觉还不错,分享给大家。

这是啥?

一句话:轻量级的 Nginx 日志分析面板 。

能干啥:

  • 实时看 PV/UV 数据
  • IP 归属地查询(国内用 ip2region 本地库,国外走 ip-api)
  • 客户端/浏览器解析
  • 支持多站点
  • 支持自定义日志格式

看下效果图:

图片
图片

👉 欢迎 加入小哈的星球,你将获得: 专属的项目实战(多个项目) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《Spring AI 项目实战》正在更新中..., 基于 Spring AI + Spring Boot 3.x + JDK 21;
  • 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17..., 点击查看项目介绍演示地址:http://116.62.199.48:7070/
  • 《从零手撸:前后端分离博客项目(全栈开发)》  2期已完结,演示链接:http://116.62.199.48/;
  • 专栏阅读地址:https://www.quanxiaoha.com/column

截止目前,累计输出 100w+ 字,讲解图 4013+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,解锁全部项目,已有4200+小伙伴加入

图片



技术栈

后端是 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: "3.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
  • 后端 API:http://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 压缩日志也能直接解析,不用手动解压。

几个实用功能

1. 远端日志拉取

日志不在本机?没关系,支持 SFTP、HTTP、S3/OSS 三种方式拉取远端日志。

比如 SFTP:

{
  "id""sftp-main",
"type""sftp",
"host""1.2.3.4",
"port": 22,
"user""nginx",
"auth": { "keyFile""/secrets/id_rsa" },
"path""/var/log/nginx/access.log"
}

2. Push Agent

如果服务器在内网或者边缘节点,可以用 Agent 主动推送日志。在日志服务器上跑一个轻量 agent,实时把日志推到 NginxPulse 主服务。

3. 自定义日志格式

不是默认的 combined 格式?可以自定义。支持两种方式:

方式一:直接写 log_format 语法

{
  "logFormat""$remote_addr - $remote_user [$time_local] \"$request\" $status $body_bytes_sent"
}

方式二:正则(命名分组)

{
  "logRegex""^(?P\\S+) - (?P\\S+) \\[(?P
}

4. Caddy 也支持

用 Caddy 的朋友也能用,配置 logType: "caddy" 就行,会按 JSON 格式解析。

5. 访问控制

生产环境可以加个密钥:

ACCESS_KEYS='["your-secret-key"]'

访问时需要带上 X-NginxPulse-Key 请求头,前端会自动弹窗让你输入。

常见问题

Q:跑起来后日志明细是空的?

A:多半是权限问题。给日志目录和数据目录加个权限:

chmod -R 777 /path/to/logs /path/to/nginxpulse_data

Q:有访问但是 PV/UV 都是 0?

A:默认排除内网 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/

目前 1.4k star,MIT 协议,可以放心用。

如果你也在找 Nginx 日志分析工具,可以试试这个。比起重量级的 ELK 或者纯命令行的 GoAccess,这个算是个不错的中间选择。

👉 欢迎加入小哈的星球,你将获得: 专属的项目实战(多个项目) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《Spring AI 项目实战》正在更新中..., 基于 Spring AI + Spring Boot 3.x + JDK 21;
  • 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17..., 点击查看项目介绍演示地址:http://116.62.199.48:7070/
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2期已完结,演示链接:http://116.62.199.48/;
  • 专栏阅读地址: https://www.quanxiaoha.com/column

截止目前,累计输出 100w+ 字,讲解图 4013+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,解锁全部项目,已有4200+小伙伴加入

图片


图片
图片



    

1. 我的私密学习小圈子,从0到1手撸企业实战项目~

2. 为什么 Spring 和 IDEA 都不推荐使用 @Autowired 注解??

3. 面试官:说说 HashMap 的扩容机制?如何扩容的?

4. SpringBoot 整合 Canal+RabbitMQ 监听数据变更~




    
图片

最近面试BAT,整理一份面试资料Java面试BATJ通关手册,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“在看”,关注公众号并回复 Java 领取,更多内容陆续奉上。

PS:因公众号平台更改了推送规则,如果不想错过内容,记得读完点一下在看,加个星标,这样每次新文章推送才会第一时间出现在你的订阅列表里。

“在看”支持小哈呀,谢谢啦

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/193130