Prometheus + Grafana monitoring stack covering a hybrid home lab environment: Linux hosts, an Arista cEOS leaf-spine fabric (via SNMP), and AWS EC2 instances (via CloudWatch) — all visualized in a single unified Grafana dashboard.
graph LR
ne["node_exporter<br/>(hosts)"] --> prom["Prometheus"]
se["snmp_exporter<br/>(Arista switches)"] --> prom
prom --> graf["Grafana"]
cw["AWS CloudWatch<br/>(EC2 metrics)"] --> graf
- Prometheus — central metrics store and scrape engine
- Grafana — dashboards and (optionally) alerting
- snmp_exporter — bridges SNMP-polled switch metrics into Prometheus
- node_exporter — host-level metrics (CPU, memory, disk) on Linux nodes
- AWS CloudWatch — added directly as a Grafana data source for EC2 metrics (no exporter needed)
| Source | Metrics | Method |
|---|---|---|
| Host server | CPU, memory, disk | node_exporter (systemd service) |
| Lab hosts | CPU, memory, disk | node_exporter (manual) |
| Arista switches (x4) | Interface traffic, operational status, errors, discards | SNMP via snmp_exporter (if_mib) |
| AWS EC2 instances | CPU utilization, network I/O | CloudWatch (native Grafana data source) |
docker compose up -d- Prometheus:
http://<host>:9090 - Grafana:
http://<host>:3000(default loginadmin/admin, change on first login)
snmp.yml isn't included in this repo — it's a large, auto-generated file from the snmp_exporter project. Download the version matching your snmp_exporter image tag:
curl -LO https://raw.githubusercontent.com/prometheus/snmp_exporter/v0.30.1/snmp.yml- Prometheus's config-reload API is disabled by default; start it with
--web.enable-lifecycleto allowcurl -X POST http://localhost:9090/-/reload. - Grafana panels pasted with "smart quotes" can silently fail to match any data — type filter values by hand if a query looks correct but returns nothing.
- Always double-check a dashboard's own time-range picker before assuming a query is broken.