fix(monitoring): scrape pve via Service VIP + node FQDNs, no hardcoded IPs #296

Merged
k.renner merged 2 commits from claude-bot/pve-cluster-vip-target into master 2026-07-17 18:29:45 +00:00
Member

Follow-up to #294, which left raw node IPs in the pve scrape config. This removes every hardcoded IP:

  • Cluster job (cluster=1,node=0): target → pve.apps.svc.cluster.local. Its EndpointSlice load-balances the PVE API across all three nodes, so cluster-wide metrics follow whichever node is up instead of pausing when jupiter (.201) specifically is down — the trade-off #294 called out in its own comment.
  • Node job (cluster=0,node=1): targets → jupiter/neptune/saturn.renner.uno instead of .201/.202/.203. Per-node identity is preserved (one target per node), the instance label now reads the hostname, and a renumbered node follows DNS without editing this file.

No IP address remains in the block.

Verified live from inside the cluster:

  • ?target=pve.apps.svc.cluster.local&cluster=1 → pve_up for cluster + all three nodes
  • ?target=jupiter.renner.uno&node=1 → jupiter node-local metrics

proxmox-cluster dashboard is max by (id) and does not filter on instance, so the label change breaks no panel.

Follow-up to #294, which left raw node IPs in the pve scrape config. This removes every hardcoded IP: - **Cluster job** (`cluster=1,node=0`): target → `pve.apps.svc.cluster.local`. Its EndpointSlice load-balances the PVE API across all three nodes, so cluster-wide metrics follow whichever node is up instead of pausing when jupiter (.201) specifically is down — the trade-off #294 called out in its own comment. - **Node job** (`cluster=0,node=1`): targets → `jupiter/neptune/saturn.renner.uno` instead of `.201/.202/.203`. Per-node identity is preserved (one target per node), the `instance` label now reads the hostname, and a renumbered node follows DNS without editing this file. No IP address remains in the block. **Verified live from inside the cluster:** - `?target=pve.apps.svc.cluster.local&cluster=1` → `pve_up` for cluster + all three nodes - `?target=jupiter.renner.uno&node=1` → jupiter node-local metrics proxmox-cluster dashboard is `max by (id)` and does not filter on `instance`, so the label change breaks no panel.
claude-bot added 1 commit 2026-07-17 18:22:57 +00:00
The pve cluster-collector job hardcoded 10.2.40.201, so cluster-wide
metrics (pve_up, guest info, storage) paused whenever jupiter
specifically was down, even with the cluster healthy. Point it at the
pve Service DNS (pve.apps.svc.cluster.local) whose EndpointSlice
load-balances the PVE API across all three nodes, so the scrape
follows whichever node is up. Node-local job keeps the three explicit
targets — it needs per-node identity.

Verified: exporter returns pve_up for cluster + all nodes when
targeted at the Service DNS.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
claude-bot added 1 commit 2026-07-17 18:24:02 +00:00
No hardcoded IP remains in the pve scrape config: the node job now
targets jupiter/neptune/saturn.renner.uno. instance label reads the
hostname, and a renumbered node follows DNS without a config edit.

Verified: exporter returns node-local metrics when targeted at
jupiter.renner.uno from inside the cluster.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
claude-bot changed title from fix(monitoring): scrape pve cluster metrics via Service VIP, not a fixed node to fix(monitoring): scrape pve via Service VIP + node FQDNs, no hardcoded IPs 2026-07-17 18:24:11 +00:00
k.renner merged commit f75e6aa6ac into master 2026-07-17 18:29:45 +00:00
Sign in to join this conversation.