likaia/nginxpulsePublic

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

AI summary: A real-time analytics and monitoring dashboard specifically designed for Nginx web servers.

Stars
2.6K
+2 today
Forks
196
Watchers
8
Open issues
12
Open PRs
1
Contributors
~9
Commits
197
Branches
1

GoMITCreated Jan 13, 2026Last push 2mo agoLatest release v1.6.24+11 stars this week+12 this month

Star history

since Jan 11, 2026
01K2KJan 2026Mar 2026May 2026Aug 2026
2.6K stars as of Aug 7, 2026, tracked back to Jan 11, 2026. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulAugMonWedFri2025-08-09: 0 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 7 commits2026-01-14: 6 commits2026-01-15: 0 commits2026-01-16: 2 commits2026-01-17: 4 commits2026-01-18: 11 commits2026-01-19: 3 commits2026-01-20: 1 commit2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 19 commits2026-01-25: 3 commits2026-01-26: 2 commits2026-01-27: 4 commits2026-01-28: 2 commits2026-01-29: 7 commits2026-01-30: 7 commits2026-01-31: 17 commits2026-02-01: 1 commit2026-02-02: 8 commits2026-02-03: 2 commits2026-02-04: 2 commits2026-02-05: 1 commit2026-02-06: 3 commits2026-02-07: 1 commit2026-02-08: 7 commits2026-02-09: 0 commits2026-02-10: 2 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 8 commits2026-02-14: 4 commits2026-02-15: 1 commit2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 1 commit2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 2 commits2026-02-27: 1 commit2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 5 commits2026-03-03: 7 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 4 commits2026-03-12: 4 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 1 commit2026-03-17: 4 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 3 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 2 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 4 commits2026-04-24: 1 commit2026-04-25: 0 commits2026-04-26: 1 commit2026-04-27: 0 commits2026-04-28: 1 commit2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 1 commit2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 1 commit2026-05-06: 0 commits2026-05-07: 2 commits2026-05-08: 2 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 2 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 1 commit2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 0 commits
185 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Outside contributions

    86% of recent commits from the community

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

What nginxpulse does

NginxPulse provides a comprehensive, real-time dashboard for monitoring the health and performance of Nginx servers. It parses Nginx access and error logs on the fly to generate metrics like requests per second, response times, and error rates. The tool offers visual representations of traffic patterns, geographic distribution of visitors, and top requested URLs. It is designed to be lightweight and easy to deploy alongside existing Nginx installations.

System administrators, DevOps engineers, and web developers who manage Nginx servers and need immediate visibility into their traffic and performance.

  • Real-time Log Parsing: Analyzes Nginx logs as they are written.
  • Performance Metrics: Displays RPS, latency, and status code distributions.
  • Traffic Visualization: Offers charts and graphs for easy trend analysis.
  • Geographic Insights: Maps visitor locations based on IP addresses.
  • Lightweight Agent: Imposes minimal overhead on the host server.

Where teams use it

Server Monitoring

Keep a close eye on the health and performance of web servers.

Traffic Analysis

Understand visitor behavior and identify popular content.

Troubleshooting

Quickly spot spikes in error rates or slow response times.

Capacity Planning

Use historical data to predict future server resource needs.

Getting started: docker run -v /var/log/nginx:/var/log/nginx likaia/nginxpulse

README

main branch

NginxPulse Logo

English | 简体中文

NginxPulse

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

源码仓库:https://github.com/likaia/nginxpulse

文档站点(推荐)

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

⚠️注意:此文档只讲解了如何使用这个项目,详细文档与示例配置请移步在线文档站点

demo-img-1.png

demo-img-2.png

目录

项目开发技术栈

重要提示(版本 > 1.5.3):已完全弃用 SQLite;单体部署必须自备 PostgreSQL 并配置 DB_DSN(或 database.dsn)。

  • 后端Go 1.24.x · Gin · Logrus
  • 数据PostgreSQL (pgx)
  • IP 归属地ip2region(本地库) + ip-api.com(远程批量)
  • 前端Vue 3 · Vite · TypeScript · PrimeVue · ECharts/Chart.js · Scss
  • 容器Docker / Docker Compose · Nginx(前端静态部署)

IP 归属地查询策略

  1. 快速过滤:空值/本地/回环地址返回“本地”,内网地址返回“内网/本地网络”。
  2. 解析解耦:日志解析阶段仅入库并标记“待解析”,IP 归属地由后台任务异步补齐并回填。
  3. 缓存优先:持久化缓存 + 内存缓存命中直接返回(默认上限 1,000,000 条)。
  4. 本地优先(IPv4/IPv6):优先查 ip2region,本地结果可用时直接使用。
  5. 远程补齐:本地返回“未知”或解析失败时,调用远端 API(默认 ip-api.com/batch,可配置)批量查询(超时 1.2s,单批最多 100 个)。
  6. 远程失败:返回“未知”。

归属地解析未完成时,页面会显示“待解析”,地域统计可能不完整。

本地数据库 ip2region_v4.xdbip2region_v6.xdb 内嵌在二进制中,首次启动会自动解压到 ./var/nginxpulse_data/,并尝试加载向量索引提升查询性能。

本项目会访问外网 IP 归属地 API(默认 ip-api.com),部署环境需放行该域名的出站访问。同时也支持自己搭建IP归属地查询服务,详见下文。

如何使用项目

1) Docker

单镜像(前端 Nginx + 后端服务):

镜像内置 PostgreSQL,启动时会自动初始化数据库(未自备数据库时)。必须挂载数据目录/app/var/nginxpulse_data/app/var/pgdata。未挂载时容器会直接退出并报错。 如果你准备在初始化向导里配置外部数据库,可先不挂载 pgdata,容器能正常启动;配置完成后重启容器即可生效。

一键启动(极简配置,首次启动进入初始化向导):

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

注意:docker_local请替换为你宿主机存在的目录,确保文件权限设置正确,能被容器正常访问,否则会出现无日志的情况。

如果更偏好配置文件方式,可将 configs/nginxpulse_config.json 挂载到容器内的 /app/configs/nginxpulse_config.json。 若未提供配置文件/环境变量,首次启动会进入“初始化配置向导”。保存后会写入 configs/nginxpulse_config.json,需重启容器生效(建议挂载 /app/configs 以持久化)。

2) Docker Compose

使用远程镜像(Docker Hub):

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
docker compose up -d

建议保留 stop_grace_period(如 90s),让内置 PostgreSQL 在 docker compose stop 时有足够时间完成一致性关闭,避免下次启动进入恢复重试。

时区设置(重要)

本项目使用系统时区进行日志时间解析与统计,请确保运行环境时区正确。

Docker / Docker Compose

  • 推荐挂载宿主机时区:-v /etc/localtime:/etc/localtime:ro(Linux)
  • 若宿主机提供 /etc/timezone,可额外挂载:-v /etc/timezone:/etc/timezone:ro
  • 若你只想指定时区,可设置 TZ=Asia/Shanghai,但需保证容器内有时区数据(例如安装 tzdata 或挂载 /usr/share/zoneinfo

单体部署(单进程)

  • 默认使用当前系统时区
  • 可通过环境变量临时指定:TZ=Asia/Shanghai ./nginxpulse

移动端访问(/m)

  • 入口地址:http://<host>:8088/m
  • 移动端仅提供 概览 / 日报 / 实时 / 日志 四个页面
  • 首次初始化必须在电脑端完成,移动端会提示在电脑打开

3) 手动构建(前端、后端)

前端构建:

cd webapp
pnpm install
pnpm run build

移动端构建(/m):

cd webapp_mobile
pnpm install
pnpm run build

后端构建:

go mod download
go build -o bin/nginxpulse ./cmd/nginxpulse/main.go

本地开发(前后端一起跑):

./scripts/dev_local.sh

前端开发服务默认端口 8088,并会将 /api 代理到 http://127.0.0.1:8089。 本地开发前请准备好日志文件,放在 var/log/ 下(或确保 configs/nginxpulse_config.jsonlogPath 指向对应文件)。

4) 单体部署(单进程)

重要提示(版本 > 1.5.3):已彻底弃用 SQLite。单体部署必须自备 PostgreSQL 并配置 DB_DSN(或在 configs/nginxpulse_config.json 填好 database.dsn)。
从仓库的releases下载对应平台的二进制文件,执行即可。

执行后会生成单体可执行文件(已内置前端静态资源),启动后即可同时提供前后端服务:

  • 前端:http://localhost:8088
  • 后端:http://localhost:8088/api/...

单体部署的配置方式

单体运行时读取配置有两种方式(任选其一):

方式 A:配置文件(默认)

  1. 在运行目录创建 configs/
  2. 放入 configs/nginxpulse_config.json
  3. 启动:./nginxpulse

方式 B:环境变量注入(无需文件)

CONFIG_JSON="$(cat /path/to/nginxpulse_config.json)" ./nginxpulse

注意事项:

  • 配置文件路径为相对路径 ./configs/nginxpulse_config.json,请确保运行时工作目录正确。
  • 如果使用 systemd,请设置 WorkingDirectory,或改用 CONFIG_JSON 注入。
  • 数据目录 ./var/nginxpulse_data 也是相对路径;找不到目录时请先确认当前进程的工作目录。

5) Makefile 构建

此项目也支持了通过Makefile来构建相关资源,命令如下:

make frontend   # 构建前端(含移动端)webapp/dist + webapp_mobile/dist
make frontend-mobile # 仅构建移动端 webapp_mobile/dist
make backend    # 构建后端 bin/nginxpulse(不内嵌前端)
make single     # 构建单体包(内嵌前端 + 复制配置与gzip示例)
make dev        # 启动本地开发(前端8088,后端8089)
make clean      # 清理构建产物

指定版本号示例:

VERSION=v0.4.8 make single
VERSION=v0.4.8 make backend

说明:

  • make single 默认构建 linux/amd64linux/arm64,产物在 bin/linux_amd64/bin/linux_arm64/
  • 单平台构建时,产物在 bin/nginxpulse,配置在 bin/configs/nginxpulse_config.json(端口默认 :8088),gzip 示例在 bin/var/log/gz-log-read-test/

Docker 部署权限说明

镜像默认以非 root 用户(nginxpulse)运行。容器里能否读取日志、写入数据,取决于宿主机目录的权限。你在容器里用 cat 看到日志,通常是因为 docker exec 默认是 root,不代表应用用户有权限。

推荐做法:让容器内用户的 UID/GID 与宿主机日志/数据目录的属主一致

步骤 1:查看宿主机目录的 UID/GID

ls -n /path/to/logs /path/to/nginxpulse_data /path/to/pgdata
#
stat -c '%u %g %n' /path/to/logs /path/to/nginxpulse_data /path/to/pgdata

步骤 2:启动容器时传入 PUID/PGID(与上面一致)

docker run ... \
  -e PUID=1000 \
  -e PGID=1000 \
  -v /path/to/logs:/var/log/nginx:ro \
  -v /path/to/nginxpulse_data:/app/var/nginxpulse_data:rw \
  -v /path/to/pgdata:/app/var/pgdata:rw \
  ...

步骤 3:确保目录对该 UID/GID 可读/可写

chown -R 1000:1000 /path/to/nginxpulse_data /path/to/pgdata
chmod -R u+rx /path/to/logs

如果你使用外部数据库(设置 DB_DSN),可以不挂载 pgdata。外置 PG 推荐使用 16 版本。 若你通过初始化向导配置外部数据库,同样可以不挂载 pgdata,保存后重启容器生效。

SELinux 说明(RHEL/CentOS/Fedora 等):

  • 这些系统默认启用 SELinux,Docker 挂载目录可能因安全上下文导致“看得见但不可访问”。
  • 解决办法是在 volume 后加 :z:Z 重新打标签:
    • :Z 让该目录仅供当前容器使用(更严格)。
    • :z 让该目录可被多个容器共享使用。
docker run ... \
  -v /path/to/logs:/var/log/nginx:ro,Z \
  -v /path/to/nginxpulse_data:/app/var/nginxpulse_data:rw,Z \
  -v /path/to/pgdata:/app/var/pgdata:rw,Z \
  ...

不推荐做法:直接 chmod -R 777。这虽然省事,但权限过宽不安全,仅建议临时排查时使用。

常见问题

  1. 日志明细无内容
    通常是容器内无权限访问宿主机日志文件。请先阅读《Docker 部署权限说明》并按步骤处理权限。

  2. 日志存在,但 PV/UV 无法统计
    默认规则会排除内网 IP。若你希望统计内网流量,请将 PV_EXCLUDE_IPS 设为空数组并重启:

PV_EXCLUDE_IPS='[]'

重启后在“日志明细”页面点击“重新解析”按钮。

  1. 日志时间不正确
    通常是运行环境时区未同步导致。请确认 Docker/系统时区正确,并按“时区设置(重要)”章节调整后重新解析日志。

  2. 无法启动 报错 tmp 目录无权限写入问题(旧版本可能出现),如果容器启动后出现如下所示的报错,请确认 nginxpulse_data 可写(具体权限问题请阅读《Docker 部署权限说明》),或设置 TMPDIR 到可写目录。

nginxpulse: initializing postgres data dir at /app/var/pgdata
/app/entrypoint.sh: line 91: can't create /tmp/tmp.KOdAPn: Permission denied

解决办法(任选其一):

-e TMPDIR=/app/var/nginxpulse_data/tmp
  1. 解析入库的数据会一直保留吗
    不会。入库后的访问数据会按 system.logRetentionDays 定时清理(默认 30 天)。
    例如你一次解析了几个月数据,后续仍会逐步清理掉保留天数之外的数据。
    注意:该参数不影响原始 Nginx 日志文件,也不等于系统运行日志(var/nginxpulse_data/nginxpulse.log)的轮转策略。

目录结构与主要文件

.
├── cmd/
│   └── nginxpulse/
│       └── main.go                 # 程序入口
├── internal/                       # 核心逻辑(解析、统计、存储、API)
│   ├── app/
│   │   └── app.go                  # 初始化、依赖装配、任务调度
│   ├── analytics/                  # 统计口径与聚合
│   ├── enrich/
│   │   ├── ip_geo.go               # IP 归属地(远程+本地)与缓存
│   │   └── pv_filter.go            # PV 过滤规则
│   ├── ingest/
│   │   └── log_parser.go           # 日志扫描、解析与入库
│   ├── server/
│   │   └── http.go                 # HTTP 服务与中间件
│   ├── store/
│   │   └── repository.go           # PostgreSQL 结构与写入
│   ├── version/
│   │   └── info.go                 # 版本信息注入
│   ├── webui/
│   │   └── dist/                   # 单体嵌入的前端静态资源
│   └── web/
│       └── handler.go              # API 路由
├── webapp/
│   └── src/
│       └── main.ts                 # 前端入口
├── webapp_mobile/                  # 移动端前端(/m)
│   └── src/
│       └── main.ts                 # 移动端入口
├── configs/
│   ├── nginxpulse_config.json      # 核心配置入口
│   ├── nginxpulse_config.dev.json  # 本地开发配置
│   └── nginx_frontend.conf         # 内置 Nginx 配置
├── docs/
│   └── versioning.md               # 版本管理与发布说明
├── scripts/
│   ├── build_single.sh             # 单体构建脚本
│   ├── dev_local.sh                # 本地一键启动
│   └── publish_docker.sh           # 推送 Docker 镜像
├── var/                            # 数据目录(运行时生成/挂载)
│   └── log/
│       └── gz-log-read-test/       # gzip 参考日志
├── Dockerfile
└── docker-compose.yml

如需更详细的统计口径或 API 扩展,建议从 internal/analytics/internal/web/handler.go 开始。

致谢

非常感谢诸位好兄弟/姐妹对此项目的投币支持。

supporter-1 supporter-2 supporter-3 supporter-4 supporter-5 supporter-6 supporter-7 supporter-8 supporter-9

写在最后

本项目大部分代码通过codex生成,我投喂了很多开源项目和资料让他做参考,在此感谢大家对开源社区的贡献。

View on GitHub

Recent activity

commits and pull requests

Recent open issues

view all

Releases and announcements

38 total
  1. v1.6.24v1.6.24May 19, 2026303 downloads
  2. v1.6.23v1.6.23May 13, 2026177 downloads
  3. v1.6.22v1.6.22May 8, 202669 downloads
  4. v1.6.21v1.6.21Apr 30, 202675 downloads
  5. v1.6.20v1.6.20Apr 25, 2026115 downloads

Commits per week

last 52 weeks
420Week of 2025-08-09: 0 commitsWeek of 2025-08-16: 0 commitsWeek of 2025-08-23: 0 commitsWeek of 2025-08-30: 0 commitsWeek of 2025-09-06: 0 commitsWeek of 2025-09-13: 0 commitsWeek of 2025-09-20: 0 commitsWeek of 2025-09-27: 0 commitsWeek of 2025-10-04: 0 commitsWeek of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 19 commitsWeek of 2026-01-18: 34 commitsWeek of 2026-01-25: 42 commitsWeek of 2026-02-01: 18 commitsWeek of 2026-02-08: 21 commitsWeek of 2026-02-15: 1 commitsWeek of 2026-02-22: 4 commitsWeek of 2026-03-01: 12 commitsWeek of 2026-03-08: 8 commitsWeek of 2026-03-15: 5 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 5 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 5 commitsWeek of 2026-04-26: 3 commitsWeek of 2026-05-03: 5 commitsWeek of 2026-05-10: 2 commitsWeek of 2026-05-17: 1 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 0 commitsWeek of 2026-06-21: 0 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 0 commitsWeek of 2026-07-12: 0 commitsWeek of 2026-07-19: 0 commitsWeek of 2026-07-26: 0 commitsWeek of 2026-08-02: 0 commitsAug 9, 2025Aug 2, 2026
185 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 3 commitsSun 1:00 — 6 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 0 commitsSun 10:00 — 0 commitsSun 11:00 — 0 commitsSun 12:00 — 1 commitsSun 13:00 — 0 commitsSun 14:00 — 0 commitsSun 15:00 — 1 commitsSun 16:00 — 2 commitsSun 17:00 — 3 commitsSun 18:00 — 2 commitsSun 19:00 — 0 commitsSun 20:00 — 0 commitsSun 21:00 — 1 commitsSun 22:00 — 2 commitsSun 23:00 — 3 commitsMon 0:00 — 2 commitsMon 1:00 — 1 commitsMon 2:00 — 0 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 0 commitsMon 9:00 — 0 commitsMon 10:00 — 1 commitsMon 11:00 — 1 commitsMon 12:00 — 0 commitsMon 13:00 — 0 commitsMon 14:00 — 1 commitsMon 15:00 — 2 commitsMon 16:00 — 1 commitsMon 17:00 — 2 commitsMon 18:00 — 0 commitsMon 19:00 — 1 commitsMon 20:00 — 0 commitsMon 21:00 — 2 commitsMon 22:00 — 3 commitsMon 23:00 — 3 commitsTue 0:00 — 4 commitsTue 1:00 — 1 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 0 commitsTue 9:00 — 3 commitsTue 10:00 — 0 commitsTue 11:00 — 2 commitsTue 12:00 — 3 commitsTue 13:00 — 0 commitsTue 14:00 — 0 commitsTue 15:00 — 0 commitsTue 16:00 — 1 commitsTue 17:00 — 1 commitsTue 18:00 — 3 commitsTue 19:00 — 0 commitsTue 20:00 — 4 commitsTue 21:00 — 4 commitsTue 22:00 — 4 commitsTue 23:00 — 2 commitsWed 0:00 — 3 commitsWed 1:00 — 1 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 0 commitsWed 9:00 — 0 commitsWed 10:00 — 0 commitsWed 11:00 — 0 commitsWed 12:00 — 0 commitsWed 13:00 — 0 commitsWed 14:00 — 1 commitsWed 15:00 — 0 commitsWed 16:00 — 4 commitsWed 17:00 — 0 commitsWed 18:00 — 0 commitsWed 19:00 — 0 commitsWed 20:00 — 1 commitsWed 21:00 — 1 commitsWed 22:00 — 3 commitsWed 23:00 — 3 commitsThu 0:00 — 0 commitsThu 1:00 — 1 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 0 commitsThu 9:00 — 1 commitsThu 10:00 — 0 commitsThu 11:00 — 3 commitsThu 12:00 — 3 commitsThu 13:00 — 0 commitsThu 14:00 — 0 commitsThu 15:00 — 1 commitsThu 16:00 — 0 commitsThu 17:00 — 0 commitsThu 18:00 — 0 commitsThu 19:00 — 0 commitsThu 20:00 — 1 commitsThu 21:00 — 4 commitsThu 22:00 — 2 commitsThu 23:00 — 4 commitsFri 0:00 — 4 commitsFri 1:00 — 1 commitsFri 2:00 — 0 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 1 commitsFri 8:00 — 0 commitsFri 9:00 — 0 commitsFri 10:00 — 2 commitsFri 11:00 — 1 commitsFri 12:00 — 0 commitsFri 13:00 — 0 commitsFri 14:00 — 0 commitsFri 15:00 — 2 commitsFri 16:00 — 3 commitsFri 17:00 — 4 commitsFri 18:00 — 1 commitsFri 19:00 — 0 commitsFri 20:00 — 0 commitsFri 21:00 — 2 commitsFri 22:00 — 2 commitsFri 23:00 — 2 commitsSat 0:00 — 3 commitsSat 1:00 — 4 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 0 commitsSat 10:00 — 7 commitsSat 11:00 — 6 commitsSat 12:00 — 1 commitsSat 13:00 — 2 commitsSat 14:00 — 5 commitsSat 15:00 — 5 commitsSat 16:00 — 4 commitsSat 17:00 — 1 commitsSat 18:00 — 0 commitsSat 19:00 — 1 commitsSat 20:00 — 0 commitsSat 21:00 — 2 commitsSat 22:00 — 2 commitsSat 23:00 — 4 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits28 (14%)
Community commits169 (86%)

197 commits in total over the last year.

DateListRankStars gained
Jan 16, 2026daily#18+152
  • avelino/awesome-go

    A curated list of awesome Go frameworks, libraries and software

    180.4K stars · Go

  • kubernetes/kubernetes

    Production-Grade Container Scheduling and Management

    124.3K stars · Go

  • usememos/memos

    Open-source, self-hosted note-taking tool built for quick capture. Markdown-native, lightweight, and fully yours.

    62K stars · Go

  • hashicorp/terraform

    Terraform enables you to safely and predictably create, change, and improve infrastructure. It is a source-available tool that codifies APIs into declarative configuration files that can be shared amongst team members, treated as code, edited, reviewed, and versioned.

    49.4K stars · Go

  • router-for-me/CLIProxyAPI

    Wrap Antigravity, ChatGPT Codex, Claude Code, Grok Build as an OpenAI/Gemini/Claude/Codex compatible API service, allowing you to enjoy the free Gemini 3.1 Pro, GPT 5.6 Series, Grok 4.5, Claude model through API

    46.3K stars · Go

  • multica-ai/multica

    Assign issues to Claude Code, Codex, Cursor, and 17 more coding agents like teammates — open-source and self-hostable.

    44.7K stars · Go