Server Access Dashboard

A dashboard for NGINX access logs: filter the traffic on my own server and spot the bots probing for config files.

Screenshot of Server Access Dashboard

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.