Skip to main content

Monitoring Stack

LXC 205 | 192.168.86.25 | Prometheus :9090, Grafana :3000, Alertmanager :9093

Components

ServicePortPurpose
Prometheus9090Metrics collection + TSDB (30-day retention)
Grafana3000Dashboards + visualization
Alertmanager9093Alert routing (Discord, Twilio SMS, HA Alexa)
Node Exporter9100Host metrics for the monitoring LXC
cAdvisor8080Docker container metrics
Blackbox Exporter9115HTTP/ICMP service probes
PVE Exporter9221Proxmox VE API metrics
NUT Exporter (tc3)9199UPS metrics for thinkcentre3
NUT Exporter (tower1)9198UPS metrics for tower1
NUT Exporter (zotac)9197UPS metrics for zotac
Dexcom Exporter9666Glucose CGM readings
Twilio Relay9667SMS webhook relay for glucose alerts
Docs Site8081Docusaurus static site (docs.woodhead.tech)
Resume Site8082Hugo static site (resume.woodhead.tech)
Landing Site8083Service link tree (woodhead.tech)

Deploy

make monitoring \
DISCORD_WEBHOOK="..." \
GRAFANA_PASSWORD="..." \
PVE_USER=monitoring@pve \
PVE_TOKEN_NAME=prometheus \
PVE_TOKEN_VALUE="..."

Dashboards

Auto-provisioned from ansible/files/monitoring/grafana/dashboards/:

  • Proxmox VE (ID 10347)
  • Docker Containers (ID 14282)
  • Traefik 3.x (ID 17346)
  • Blackbox Exporter (ID 7587)
  • Dexcom Glucose (custom)
  • Home (custom overview)

Dexcom Glucose Monitoring

Python exporter polling Dexcom Share API every 5 minutes.

Alert thresholds:

AlertThresholdDelaySeverity
GlucoseCriticalLow< 55 mg/dLImmediateCritical
GlucoseLow55-70 mg/dL5 minWarning
GlucoseHigh> 250 mg/dL15 minWarning
GlucoseCriticalHigh> 350 mg/dL5 minCritical
DexcomStaleReadingNo data 15 min5 minWarning

Status: Built, blocked on Dexcom Share credentials + Twilio account.

Verify

curl http://192.168.86.25:9090/-/healthy
curl http://192.168.86.25:3000/api/health