Skip to content

Monitoring

James Brucker edited this page Nov 27, 2025 · 10 revisions

We want to remotely monitor the health, activity, and related metrics of

  • back-end application code
  • web server, e.g. Nginx (production) or Uvicorn (development)
  • database
  • front-end

For the first three items, the initial implementation will use Prometheus for metrics and Grafana for visual display of the data.

Monitoring Components and URLs

Component Monitor URL
FastAPI WS prometheus-fastapi-instrumentor + custom code in main.py http://localhost:8000/metrics
Nginx /nginx_status location, accessible only inside Docker network http://nginx:8080/nginx_status
Nginx Exporter nginx-exporter collects and adapts Nginx data for Prometheus http://nginx-exporter:9113/metrics
Prometheus Server Collects & records metrics. Paths: /metrics, /targets, /query http://localhost:9090
Grafana UI Grafana visualizer for Prometheus and other services http://localhost:4000

Note that Docker uses an internal DNS to resolve container names like nginx to IP addresses. Use docker network ls to discover network names, docker network inspect homelog_default to discover container IP addresses.

To verify a container name (nginx-exporter) is being resolved to an internal IP address:

docker exec -it nginx nslookup nginx-exporter

As of this writing, the relevant files and directories are:

project/
├── docker-compose.yml    Configure containers, exposed ports, and volumes
├── backend/
│   ├── Dockerfile        FastAPI web service + Uvicorn
│   └── main.py           Configure and expose metrics for Prometheus
├── nginx/                Nginx proxies the backend web service
│   └── nginx.conf        Exposes metrics (in the docker network) at path `/nginx_status`
└── monitor/
    └── prometheus.yml

Instrument Services to Expose Metrics Data

Prometheus collects metrics data from various sources. These pages describe how to expose metrics from different sources:

Grafana Dashboards for Visualizing Data

Defining a Grafana dashboard from scratch is time-consuming. You can import dashboards by ID from Grafanalabs and connect them to your own data source.

Discover, explore, and download dashboards: https://grafana.com/grafana/dashboards/

Nginx Dashboards for nginx-prometheus-exporter are fairly standard:

Dashboard ID Description
12708 Official Nginx exporter dashboard, designed for the exporter, 2020-07-26
12452 Another dashboard designed explicitly for nginx-prometheus-exporter, 2022-11-21

Clone this wiki locally