Operations 7 min read

A Lightweight Nginx Log Analyzer That Actually Works

NginxPulse is a lightweight, Docker‑ready Nginx log analysis panel built with Go‑Gin backend and Vue3 frontend, offering real‑time PV/UV, IP geolocation, multi‑site support, custom log formats, remote log fetching, and easy deployment via a single command or Compose file.

java1234
java1234
java1234
A Lightweight Nginx Log Analyzer That Actually Works

Overview

Lightweight Nginx log analysis panel that shows real‑time PV/UV, IP geolocation (ip2region for China, ip‑api for overseas), client/browser parsing, multi‑site support, and custom log format handling.

Technology Stack

Backend: Go + Gin. Frontend: Vue3 + Vite + PrimeVue. Database: SQLite.

IP geolocation flow: check in‑memory cache → batch remote API query → fallback to local ip2region database.

Running the Service

Docker one‑liner

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

Replace /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-stopped

Frontend 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 paths such as "/logs/access-*.log" are supported; compressed .gz logs are parsed directly.

Practical Features

Remote Log Retrieval

Supported protocols: SFTP, HTTP, 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

Lightweight agent can push logs from NAT‑ed or edge servers to the NginxPulse server in real time.

Custom Log Formats

Method 1 – direct log_format syntax:

{
  "logFormat": "$remote_addr - $remote_user [$time_local] \"$request\" $status $body_bytes_sent"
}

Method 2 – regular expression with named groups:

{
  "logRegex": "^(?P<ip>\\S+) - (?P<user>\\S+) \[(?P<time>[^\\]]+)\]..."
}

Caddy Compatibility

Set logType: "caddy" to parse JSON‑formatted Caddy logs.

Access Control

Define ACCESS_KEYS='["your-secret-key"]' and include header X-NginxPulse-Key in requests; the frontend prompts for the key.

Common Issues

Empty log details after startup

Usually a permission problem. Grant read/write permissions:

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

PV/UV values remain zero

Internal IPs are excluded by default. Set PV_EXCLUDE_IPS='[]' to include them.

Standalone Deployment

Build a single executable that bundles the frontend: ./scripts/build_single.sh The binary runs on amd64 and arm64 and serves both backend and frontend.

Repository

https://github.com/likaia/nginxpulse

MIT‑licensed, >1.4k stars.

Comparison

Positions between heavyweight ELK stacks and command‑line‑only tools such as GoAccess: lightweight, easy to deploy, and feature‑rich.

NginxPulse screenshot
NginxPulse screenshot
NginxPulse dashboard
NginxPulse dashboard
Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

DockerGoVuenginxSQLitelog analysisNginxPulse
java1234
Written by

java1234

Former senior programmer at a Fortune Global 500 company, dedicated to sharing Java expertise. Visit Feng's site: Java Knowledge Sharing, www.java1234.com

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.