Observability stack
InfluxDB + Grafana split out of Home Assistant into their own containers, now serving 14 dashboards across the cluster, power, energy costs and Home Assistant.
- InfluxDB
- 1.8.10
- Grafana
- OSS 13
- Datasources
- 2
- Dashboards
- 14
At a glance
Out of HAOS
InfluxDB used to live as a Home Assistant add-on, which meant every HA restart took down metric collection for the whole cluster. It now runs as a standalone LXC on the EliteDesk mini, pinned to 1.8.10 via apt-mark hold so a stray upgrade can’t lose data, with its own users for the PVE metric server, HA, and a read-only Grafana account.
┌──────────────┐
│ pvestatd × 4 │ push interval: 30s
└──────┬───────┘
▼
┌───────────────┐
│ InfluxDB │ CT 113 · 192.168.1.118:8086
│ 1.8.10 (held)│ dbs: proxmox · homeassistant
└───┬───────┬───┘
│ │ read-only grafana_reader
▼ ▼
┌───────────────┐
│ Grafana 13 │ CT 117 · 192.168.1.139:3000
└───────────────┘ 14 dashboards, AU date formatsThe dashboards
Fourteen in all, grown from the four I bootstrapped the stack with. The ones worth describing:
- Proxmox cluster. Telmate 10048 with all four nodes wired in, the obvious choice for at-a-glance health.
- Laptop battery. Nine custom panels on the laptop node’s battery. The health percentage is a stored constant, not a measurement: the fuel gauge only re-learns full capacity on a complete discharge, and the node halts itself at 20 % before one can happen. The panels that matter are the charge cap, which must read 80 %, and the live charge level.
- HA state changes. The Grafana 12705 community dashboard with template-variable dropdowns for domain, measurement and entity_id.
- HA overview. A custom 23-panel home dashboard with collapsible rows for climate, energy and the retail tariff, smart-device batteries, air quality, health metrics and BLE presence.
- Energy. Four boards on the household energy meters: a long-history view, a card-for-card rebuild of Home Assistant’s Energy dashboard, battery ROI and bills, and grid-charge arbitrage. Two Python engines on a daily systemd timer compute the savings and arbitrage series and write them back to InfluxDB.
- UPS. Power and runtime every 10 seconds from the laptop node, buffered and replayed if the write fails, because InfluxDB lives on a node that shuts down when the UPS runs low.
- Smaller boards. Page views for the three sites I host, this one included; a household food log; and trips and fuel per car, from ESP32 loggers on the OBD ports.
Provisioning
Datasources are set up via Grafana’s file provisioning so a rebuild brings them back identically, and the UI lock keeps them tamper-proof. The Grafana CT itself reads its InfluxDB password from pmxcfs via a tiny one-shot at start.
# /etc/grafana/provisioning/datasources/influxdb.yaml
apiVersion: 1
datasources:
- name: InfluxDB-Proxmox
type: influxdb
access: proxy
url: http://192.168.1.118:8086
database: proxmox
user: grafana_reader
secureJsonData:
password: ${GRAFANA_READER_PASSWORD}
editable: false
isDefault: true
- name: InfluxDB-HomeAssistant
type: influxdb
access: proxy
url: http://192.168.1.118:8086
database: homeassistant
user: grafana_reader
secureJsonData:
password: ${GRAFANA_READER_PASSWORD}
editable: false