一款轻量级 Nginx 访问日志分析与可视化面板,提供实时统计
轻量级 Nginx 访问日志分析与可视化面板,提供实时统计、PV 过滤、IP 归属地与客户端解析。
项目开发技术栈
重要提示(版本 > 1.5.3):已完全弃用 SQLite;单体部署必须自备 PostgreSQL 并配置 DB_DSN(或 database.dsn)。Docker 镜像内置 PostgreSQL。 - 后端: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 归属地查询策略
- 快速过滤:空值/本地/回环地址返回“本地”,内网地址返回“内网/本地网络”。
- 解析解耦:日志解析阶段仅入库并标记“待解析”,IP 归属地由后台任务异步补齐并回填。
- 缓存优先:持久化缓存 + 内存缓存命中直接返回(默认上限 1,000,000 条)。
- 本地优先(IPv4/IPv6):优先查 ip2region,本地结果可用时直接使用。
- 远程补齐:本地返回“未知”或解析失败时,调用远端 API(默认 ip-api.com/batch,可配置)批量查询(超时 1.2s,单批最多 100 个)。
- 远程失败:返回“未知”。
归属地解析未完成时,页面会显示“待解析”,地域统计可能不完整。
本地数据库 ip2region_v4.xdb 与 ip2region_v6.xdb 内嵌在二进制中,首次启动会自动解压到 ./var/nginxpulse_data/,并尝试加载向量索引提升查询性能。
本项目会访问外网 IP 归属地 API(默认 ip-api.com),部署环境需放行该域名的出站访问。 自定义 IP 归属地 API
可通过 system.ipGeoApiUrl 或环境变量 IP_GEO_API_URL 指向自定义服务。 注意事项:编写 API 服务时,请务必严格按照本章节所述协议进行设计与返回,否则解析结果不可用。 请求协议: - POST JSON,Content-Type: application/json
- 请求体为数组,每个元素包含:
- query:IP 字符串
- fields:返回字段列表(可忽略)
- lang:语言(zh-CN / en,可忽略)
响应协议: - 返回 JSON 数组(顺序与请求一致,或通过 query 回填)
- 每个元素必须包含以下字段(字段含义如下):
- status:success 表示成功,其他值视为失败
- message:失败原因(可为空)
- query:IP 字符串(用于匹配请求)
- country:国家名称(用于全球维度)
- countryCode:国家代码(如 CN、US)
- region:区域代码(可为空)
- regionName:省/州名称
- city:城市名称
- isp:运营商名称(可为空)
当 status != success 或地址字段为空时,会回填为“未知”。
访问: - 前端:http://localhost:8088
- 后端:http://localhost:8089
前端语言: - 默认语言由后端 APP_LANGUAGE / 配置文件 system.language 决定。
- 可通过 URL 参数覆盖:?lang=en 或 ?locale=en-US。
二次开发注意事项
环境依赖
- Go 1.24.x(与 go.mod 保持一致)
- Node.js 20+ / npm
- Docker(可选,用于容器化)
配置与数据目录
- 配置文件:configs/nginxpulse_config.json
- 数据目录:var/nginxpulse_data/(相对当前工作目录)
- nginx_scan_state.json:日志扫描游标
- ip2region_v4.xdb:IPv4 本地库
- ip2region_v6.xdb:IPv6 本地库
- nginxpulse.log:应用运行日志(解析进度/告警等),不参与访问统计
- nginxpulse_backup.log:运行日志轮转文件(超过 5MB 自动轮转)
- Docker 镜像内置 PostgreSQL,默认数据目录:var/pgdata/
- 数据库由 PostgreSQL 提供,不存放在数据目录内。
- 首次启动会自动创建数据库结构,并在清理日志时回收维表孤儿数据。
- 数据库内包含维表与聚合表(*_dim_*、*_agg_*),用于去重和统计加速。
- 环境变量覆盖:
- CONFIG_JSON / WEBSITES
- LOG_DEST / TASK_INTERVAL / SERVER_PORT
- LOG_RETENTION_DAYS / LOG_PARSE_BATCH_SIZE / IP_GEO_CACHE_LIMIT
- IP_GEO_API_URL
- PV_STATUS_CODES / PV_EXCLUDE_PATTERNS / PV_EXCLUDE_IPS
- DB_DRIVER / DB_DSN
- DB_MAX_OPEN_CONNS / DB_MAX_IDLE_CONNS / DB_CONN_MAX_LIFETIME
- POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DB
- POSTGRES_PORT / POSTGRES_LISTEN / POSTGRES_CONNECT_HOST / PGDATA
大日志解析策略
- 默认先解析最近 7 天的数据,保证前台查询能尽快返回。
- 历史数据通过后台分批回填(按时间/字节预算),避免阻塞周期性扫描。
- 当前台查询的时间范围仍在回填中时,会提示“所选范围仍在解析中,数据可能不完整”。
大日志解析加速亮点(10G+)
- 解析与归属地解耦:日志解析阶段只做结构化入库 + “待解析”占位,不再同步做 IP 归属地查询,大幅减少耗时瓶颈。
- 后台异步回填:IP 归属地解析进入待处理队列,后台按批解析并回填 location,不阻塞主解析流程。
- 批量入库可配置:支持 LOG_PARSE_BATCH_SIZE 控制批量入库大小,兼顾吞吐与内存占用。
- 冷热分层处理:最近 7 天优先解析,历史数据回填按预算进行,避免单次扫描阻塞。
- 缓存命中优先:IP 归属地缓存命中直接复用,减少远程查询次数。
一款轻量级 Nginx 访问日志分析与可视化面板,提供实时统计
一款轻量级 Nginx 访问日志分析与可视化面板,提供实时统计

链接: https://pan.baidu.com/s/1vSvVtPQdhybZClW_N7jpqg
提取码下载:
|