2026-06-24 17:13:44 +02:00
|
|
|
# fleet-prometheus — fleet liveness source of truth.
|
|
|
|
|
#
|
|
|
|
|
# Deliberately SEPARATE from the home `prom` on PIHA (LAN-only). The `fleet`
|
|
|
|
|
# external label and the `fleet-` job naming make it unambiguous in every
|
|
|
|
|
# scraped series that this instance monitors the distributed fleet, not the
|
|
|
|
|
# home LAN. This file is SECRET-FREE by contract — never inline tokens here
|
|
|
|
|
# (the home prom embedding a plaintext HAOS token is the anti-pattern we avoid).
|
|
|
|
|
|
|
|
|
|
global:
|
|
|
|
|
scrape_interval: 15s
|
|
|
|
|
external_labels:
|
|
|
|
|
fleet: "homelab-codex"
|
|
|
|
|
|
|
|
|
|
# alerting:
|
|
|
|
|
# # Alertmanager wiring is added in a separate step (fleet liveness alerting).
|
|
|
|
|
# alertmanagers: []
|
|
|
|
|
|
2026-06-30 16:42:52 +02:00
|
|
|
# Liveness rules. Path is relative to /etc/prometheus/ → /etc/prometheus/rules/*.yml,
|
|
|
|
|
# consistent with the ./rules:/etc/prometheus/rules:ro mount in docker-compose.yml.
|
|
|
|
|
rule_files:
|
|
|
|
|
- "rules/*.yml"
|
2026-06-24 17:13:44 +02:00
|
|
|
|
|
|
|
|
scrape_configs:
|
|
|
|
|
# Self-monitoring — Prometheus scrapes its own /metrics. Bridged container
|
|
|
|
|
# listens on 0.0.0.0:9090, so localhost resolves inside the container.
|
|
|
|
|
- job_name: "prometheus"
|
|
|
|
|
static_configs:
|
|
|
|
|
- targets: ["localhost:9090"]
|
|
|
|
|
|
2026-06-26 16:19:02 +02:00
|
|
|
# Fleet node_exporters. One job, one static_configs entry per node, each
|
|
|
|
|
# carrying exactly one label: node:<name>. No availability/schedule/tier
|
|
|
|
|
# labels by design — "when to alert" (e.g. lustro/solaria are planned-off at
|
|
|
|
|
# times) is decided LATER by the brain from metric history (anomaly
|
|
|
|
|
# detection), never by static labels or time-based rules. Today's only goal
|
|
|
|
|
# is collecting metrics.
|
2026-06-24 17:13:44 +02:00
|
|
|
- job_name: "fleet-node"
|
|
|
|
|
static_configs:
|
2026-06-26 16:19:02 +02:00
|
|
|
# VPS-local node_exporter: network_mode: host on the host's :9100,
|
|
|
|
|
# reached via the host-gateway alias declared in docker-compose.yml.
|
2026-06-24 17:13:44 +02:00
|
|
|
- targets: ["host.docker.internal:9100"]
|
|
|
|
|
labels:
|
|
|
|
|
node: "vps"
|
2026-06-26 16:19:02 +02:00
|
|
|
# Tailscale fleet targets — confirmed reachable from VPS (wget, 2026-06-26).
|
|
|
|
|
- targets: ["100.108.208.3:9100"]
|
|
|
|
|
labels:
|
|
|
|
|
node: "piha"
|
|
|
|
|
- targets: ["100.100.231.104:9100"]
|
|
|
|
|
labels:
|
|
|
|
|
node: "solaria"
|
|
|
|
|
- targets: ["100.99.85.73:9100"]
|
|
|
|
|
labels:
|
|
|
|
|
node: "lustro"
|
2026-06-24 17:13:44 +02:00
|
|
|
|
2026-06-26 16:19:02 +02:00
|
|
|
# Deliberately NOT scraped (visible decision, not an oversight):
|
|
|
|
|
# - saturn (100.121.168.72): laptop/workstation, not infra; often powered
|
|
|
|
|
# off → omitted.
|
|
|
|
|
# - chelsty (100.122.201.22) + chelsty-infra (100.98.91.98): node_exporter
|
|
|
|
|
# DOWN from VPS (LTE edge), 2026-06-26 — to be investigated separately
|
|
|
|
|
# (exporter not deployed vs ACL block). Not listed as dead targets, which
|
|
|
|
|
# would pollute future liveness signals.
|