Py学习  »  NGINX

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

小哈学Java • 1 周前 • 102 次点击  
将 小哈学Java 设为“星标

第一时间收到文章更新

What is NGINX来源:https://juejin.cn/post/7597080391880343562

目录

  • 01 这是啥?
  • 02 技术栈
  • 03 怎么跑起来
    • Docker 一把梭
    • Docker Compose
    • 多网站怎么配?
  • 04 几个实用功能
  • 05 常见问题
  • 06 单体部署
  • 07 最后

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

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

01 这是啥?

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

能干啥:

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

看下效果图:

NginxPulse 效果图
NginxPulse 效果图
NginxPulse 效果图
NginxPulse 效果图

02 技术栈

后端是 Go + Gin,前端是 Vue3 + Vite + PrimeVue,数据库就一个 SQLite,够轻量。

IP 归属地这块挺聪明的:先查内存缓存,然后走远程 API 批量查,失败了再用本地 ip2region 兜底。既保证速度又保证准确率。

03 怎么跑起来

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 压缩日志也能直接解析,不用手动解压。

04 几个实用功能

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 请求头,前端会自动弹窗让你输入。

05 常见问题

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

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

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

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

A:默认排除内网 IP。如果想统计内网流量,把 PV_EXCLUDE_IPS 设成空数组:

PV_EXCLUDE_IPS='[]'

06 单体部署

如果不想用 Docker,可以构建成单个可执行文件:

./scripts/build_single.sh

会生成一个内置前端的二进制文件,直接运行就能同时提供前后端服务。支持 amd64 和 arm64。

07 最后

GitHub 地址:

https://github.com/likaia/nginxpulse

在线演示:

https://nginx-pulse.kaisir.cn/

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

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

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

  • 《仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17..., 点击查看项目介绍演示地址:http://116.62.199.48:7070/
  • Spring AI 应用(RAG 智能客服)》已完结, 基于 Spring AI + Spring Boot 3.x + JDK 21

  • 秒杀系统设计》正在更新中,单体到微服务高并发架构演进

  • 前后端分离博客项目(全栈开发) 已完结,演示链接:http://116.62.199.48/
  • 项目阅读地址:https://quanxiaoha.com/column

截止目前,累计输出 150w+ 字,讲解图 4013+ 张,还在持续爆肝中..  戳我加入学习,解锁全部项目,已有4900+小伙伴加入

图片
图片
图片

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

2. 面试官:什么是时间片?

3. EasyExcel凉了?FastExcel又"改名"了?这次它进了Apache,再不会跑了!

4. 拒绝再买服务器!我用 Docker + FRP 实现内网穿透,舒服~

图片





    

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

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

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

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

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