Server Access Dashboard
A dashboard for NGINX access logs: filter the traffic on my own server and spot the bots probing for config files.
The problem
My server’s access logs are long and noisy. Most of the interesting lines, like scanners asking
for /.git/config or phpinfo.php, drown in normal traffic, and reading raw log files over SSH
is no way to find them. I wanted a page where I can filter by IP, country, domain and status and
see what’s going on.
What I built
- Log parser. A Python service that reads the NGINX access logs on a schedule, parses each line and writes it to PostgreSQL with indexes for the common queries.
- API. A FastAPI backend that serves the parsed entries with filters for IP, country, domain, status code and time range.
- Frontend. A Vue.js single-page app: a paginated log table with status codes and country flags, a filter panel, accesses by country, and an optional 30-second auto-update.
- Deployment. Everything runs in Docker and starts with one Docker Compose file.
What it shows
- Every request with time, IP, status, country, domain and path
- Accesses by country
- Suspicious requests at a glance, such as probes for config and PHP files
- Data export for further analysis
Stack
Python, FastAPI, PostgreSQL, Vue.js, NGINX, Docker Compose.