A Lightweight Nginx Log Analyzer Worth Trying
NginxPulse is a lightweight, Docker‑friendly Nginx log analysis panel that offers real‑time PV/UV, IP lookup, multi‑site support, custom log formats, remote log pulling, and access control, with simple deployment via Docker, Docker‑Compose, or a single binary.
What is NginxPulse?
One‑sentence: a lightweight Nginx log analysis panel.
Real‑time PV/UV statistics
IP location lookup (ip2region locally, ip‑api for foreign IPs)
Client/browser parsing
Multi‑site support
Custom log format support
Tech Stack
Backend: Go + Gin. Frontend: Vue3 + Vite + PrimeVue. Database: a single SQLite file.
IP location lookup order: in‑memory cache → remote API batch lookup → fallback to local ip2region database.
Running the service
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:latestReplace /your/nginx/logs/access.log with the actual log file path.
Docker 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-stoppedFrontend panel: http://localhost:8088. Backend API: http://localhost:8089.
Multi‑site configuration
WEBSITES='[
{"name":"主站","logPath":"/logs/main.log","domains":["www.example.com"]},
{"name":"博客","logPath":"/logs/blog.log","domains":["blog.example.com"]}
]'Wildcard log paths (e.g., /logs/access-*.log) and compressed .gz logs are supported.
Remote log pull
Supports SFTP, HTTP, and S3/OSS. Example SFTP configuration:
{
"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"
}Push agent
A lightweight agent can push logs from internal or edge servers to the NginxPulse service in real time.
Custom log formats
Two definition methods:
{"logFormat":"$remote_addr - $remote_user [$time_local] \"$request\" $status$body_bytes_sent"} {"logRegex":"^(?P<ip>\\S+) - (?P<user>\\S+) \[(?P<time>[^\\]]+)\]..."}Caddy support
Set logType: "caddy" to parse JSON‑formatted Caddy logs.
Access control
Define secret keys with ACCESS_KEYS='["your-secret-key"]' and include the X-NginxPulse-Key header in requests.
FAQ
Log details are empty after start – usually a permission issue. Example fix:
chmod -R 777 /path/to/logs /path/to/nginxpulse_dataPV/UV counters are zero despite traffic – internal IPs are excluded by default. Set PV_EXCLUDE_IPS='[]' to include them.
Single‑binary deployment
Build a self‑contained binary (frontend included) with: ./scripts/build_single.sh The binary supports both amd64 and arm64 platforms.
References
GitHub: https://github.com/likaia/nginxpulse
Online demo: https://nginx-pulse.kaisir.cn/
MIT‑licensed, approximately 1.4k stars.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
SpringMeng
Focused on software development, sharing source code and tutorials for various systems.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
