feat(observability): AMD GPU tier — amdgpu-exporter DaemonSet, metric contract, dashboard reconcile - #1354
Conversation
… contract, dashboard reconcile Slice 1/3 (defilantech#1185) and the dashboard half of slice 3/3 (defilantech#1187) of defilantech#700, consolidated onto the merged llmkube-amdgpu-exporter (llmkube-runtimes#16) as the canonical sysfs exporter: - config/monitoring/amdgpu-exporter.yaml: DaemonSet + headless Service mirroring the dcgm-exporter pattern (hostPort 9494, scrape annotations), hardened to the exporter's posture (nonroot 65534, read-only rootfs, caps dropped, /sys mounted ro). Image pinned to the candidate digest until an amdgpu-exporter-v* tag exists. - prometheus-scrape-config.yaml: llmkube-amd-gpu static job. - docs/observability/amd-gpu-metrics.md: the pinned metric contract (defilantech#1185's deliverable) — per-GPU card/pci_slot labeling (pci_slot is the stable key), the GTT-is-the-model-memory note, node_hwmon cross-check, llamacpp:* inference signals, and deliberate gaps (mclk, per-process). - amd-gpu-observability.json: amdgpu_sclk_mhz (the pre-merge lab exporter's name) -> amdgpu_clock_hertz{sensor="sclk"} / 1e6, matching what the merged exporter actually emits; busy/vram/gtt and the node_hwmon health panels already matched. Fixes defilantech#1185 AI assistance: authored with Claude Code. Signed-off-by: Jory Irving <jory.irving@stackadapt.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
|
Jory, this is really clean, thank you. You took the naming feedback from the exporter PR and reconciled the whole contract to Two things before I merge:
Fix the selector and I'll get the release tag cut, then we merge. Thanks again — great slice. |
…e label accelerator: amd is what the gfx1151 node actually carries; llmkube.dev/gpu-vendor scheduled zero pods. Signed-off-by: Jory Irving <jory.irving@stackadapt.com>
|
Selector fixed — Standing by on the image pin: the moment |
|
Selector fix confirmed, thanks — I've cut the release on my side: The released digest to pin: image: ghcr.io/defilantech/llmkube-amdgpu-exporter:0.1.0@sha256:150fc4ad15677fa43f747842404e23b23834f980b54151749048eb650bd5fcef(or just the digest, if you'd rather not carry the tag alongside it — Swap the candidate pin for that and I'll merge. Nice work on this one — it closes out #700. |
What
AMD GPU observability slices for #700: the exporter DaemonSet + metric contract (#1185) and the dashboard reconcile for #1187 — consolidated onto the merged
llmkube-amdgpu-exporter(#16 in llmkube-runtimes) as the canonical sysfs exporter.Why
Fixes #1185; unblocks the remaining scrape-confirm halves of #1186/#1187.
The Jul-21 decomposition pinned a contract from the quick lab exporter (
amdgpu_sclk_mhz, llmkubelab manifest). Since then the reviewed sysfs exporter merged intollmkube-runtimeswith slightly different (richer) names — per-sensor labels,pci_slotas the stable key, native temp/power,pcie_replay_total. This PR makes that the single contract everywhere:config/monitoring/amdgpu-exporter.yaml— DaemonSet + headless Service mirroringdcgm-exporter.yaml(hostPort 9494, scrape annotations), with the exporter's hardened posture (nonroot 65534, read-only rootfs, caps dropped,/sysro). Image pinned to the candidate digest — happy to swap toamdgpu-exporter-v0.1.0in this PR if you cut the tag.prometheus-scrape-config.yaml—llmkube-amd-gpustatic job, matching the doc's existing style.docs/observability/amd-gpu-metrics.md— the pinned contract [FEATURE] AMD observability slice 1/3: rocm-smi exporter DaemonSet + ServiceMonitor (owns metric contract) #1185 owns: full metric table,pci_slot-is-the-stable-key, the GTT note (model weights live there on APUs),node_hwmon_*cross-check for the health row,llamacpp:*inference signals (slice 2), and deliberate gaps (mclk viapp_dpm_*only, no per-process attribution).amd-gpu-observability.json— one expr fix:amdgpu_sclk_mhz→amdgpu_clock_hertz{sensor="sclk"} / 1e6(unit stays MHz).busy/vram/gttexprs and thenode_hwmonhealth panels already matched the merged exporter, so they're untouched.Checklist
kustomize build config/monitoringvalidates, dashboard JSON validatedmake lint— no Go changes