开发了一个nginx日志分析面板

前言

最近在优化网站访问链路的过程中,部署了一套WAF防火墙,它大部分功能都做的挺好,美中不足的地方就是针对于网站访客的相关功能需要付费(3600元/年)才能用。

付费是不可能付费的,找了一圈nginx日志分析的开源项目,大部分都做的挺简陋的,要么就是做的很重,需要部署其他服务。

既然找不到合适的,那就自己动手写一个吧!

实现效果

做了4个模块对日志数据进行分析。

  • 访问概况
  • 数据日报
  • 实时访问
  • 访问明细

访问概况

概况模块中,做了8个维度的数据分析。

核心指标

在这个维度中,针对http状态码、浏览量、访客数、会话数做了更细致的划分。

每一个划分中,在详情面板里,都可以看到这个访客在什么时间做了什么事情。

趋势分析 & 新老访客

这一部分可以看到每天的访问趋势以及当天与前一天的新老访客占比。

来路、受访页、入口页

这部分可以看到访客的来源,以及每个路径的访问次数。

地域 & 终端设备

这部分可以看到每个省份的访问情况以及访问设备的分布情况。

数据日报

在这个模块中,可以看到每天的浏览量、访客数、平均访问时长等信息。

实时访问

在这个模块里,可以查看最近5/15/30分钟内的访问情况

访问明细

这个模块就以表格的形式展示每一条日志。

如何使用

为了方便使用,我已经将这个项目打包成镜像发布到dockerhub上了,镜像名为magiccoders/nginxpulse,可以通过docker的形式使用,也可以通过docker compose的形式使用。

需要传入的参数:

  • WEBSITES 它的值是个数组,一个对象就是一个网站,需要传入网站名、日志路径、网址(或者内网ip,主要用于站内/站外的区分)
  • ports 端口映射,容器内暴露出来的端口是8088
  • volumes 文件挂载,这里需要挂载:日志文件、容器内产生的数据文件、时区

此处我以docker compose的形式举例:

yaml 复制代码
version: "3"
services:
  nginxpulse:
    image: magiccoders/nginxpulse:latest
    container_name: local_nginxpulse
    ports:
      - "9200:8088"
    environment:
      WEBSITES: '[{"name":"神奇的程序员","logPath":"/var/log/nginx/access.log","domains":["kaisir.cn","www.kaisir.cn"]}]' #domains用于"来源(referer)统计"的站内/站外分类
      PV_EXCLUDE_IPS: '["127.0.0.1", "::1", "10.10.0.1", "192.168.30.21"]' #pv统计时需要排除的ip
    volumes:
      - ./nginx_data/logs/all/access.log:/var/log/nginx/access.log
      - ./nginxpulse_data:/app/nginxpulse_data
      - /etc/localtime:/etc/localtime
    restart: unless-stopped

写在最后

至此,文章就分享完毕了。

我是神奇的程序员,一位前端开发工程师。

如果你对我感兴趣,请移步我的个人网站,进一步了解。

相关推荐
Pedantic1 小时前
SwiftUI 手势层级(Gesture Hierarchy)详解
前端
飘尘1 小时前
前端转型全栈(Java后端)的快速上手指引
前端·后端·全栈
一颗烂土豆1 小时前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
浏览器工程师2 小时前
AI Agent 接浏览器任务,先别让它一路点到底
前端·后端
雨季mo浅忆2 小时前
VSCode自动格式化三要素
前端
爱勇宝3 小时前
深扒 Anthropic 1680 位工程师简历:应届生几乎没机会,AI 公司最缺的不是博士
前端·后端·程序员
kyriewen4 小时前
同事每天催我 Code Review,我写了个脚本让 AI 替我 review PR——现在他反过来催 AI 了
前端·javascript·ai编程
user20585561518136 小时前
Windows 项目安装时报 `node-sass` 错误,如何快速处理
前端
LiaCode6 小时前
Redis 在生产项目的使用
前端·后端