WIP: monitoring(titan): capacity guardrails for titan-20/21/22 audit (v2) #51
Draft
hermes-automation
wants to merge 3 commits from
feature/t_26da4c88-titan-capacity-guardrails-v2 into main
pull from: feature/t_26da4c88-titan-capacity-guardrails-v2
merge into: titan:main
titan:main
titan:feature/hermes-agent-build-mirrors
titan:feature/hermes-agent-multiarch
titan:feature/hermes-next-hux
titan:feature/hermes-hux-contracts
titan:feature/t_39cf1905-webui-build-token
titan:feature/t_26da4c88-titan-capacity-guardrails-v4
titan:feature/t_26da4c88-titan-capacity-guardrails-v3
titan:feature/t_26da4c88-titan-capacity-guardrails
titan:fix/t_39cf1905-jenkins-controller-priority
titan:feature/t_8cbe6a55-hermes-webui-release-v2
titan:feature/t_8cbe6a55-hermes-webui-release
titan:feature/hermes-domain-rename-agent-worker-v2
titan:hermes/t_65356568-multiuser-capacity-assessment
titan:fix/cli-auto-failover-effort
titan:feature/hermes-pr44-after-pr43
titan:fix/hermes-heartbeat-dead-reclaim-replacement
titan:handoff/t_1a2c627b
titan:feature/hermes-combined-multilingual-voice-v2
titan:fix/hermes-handsfree-stt-webm
titan:fix/hermes-restore-legacy-chat-triage-hosts-v2
titan:feature/hermes-domain-rename-agent-worker-bstein
titan:fix/hermes-restore-legacy-chat-triage-hosts-v3
titan:hermes/tts-voice-multilingual-prerequisite
titan:fix/hermes-restore-legacy-chat-triage-hosts
titan:fix/hermes-oidc-ensure-rerun-hostname-rollout
titan:feature/hermes-direct-cli-lane-concurrency-2-replacement
titan:feature/hermes-domain-rename-chat-bstein-triage
titan:feature/hermes-kanban-profile-concurrency-2
titan:feature/hermes-zombie-lane-heartbeat-reclaim
titan:hermes/repair-pr26-voice-split
titan:feature/hermes-durable-two-worker-cli-concurrency
titan:hermes/chat-voice-conversation-instrument
titan:feature/hermes-domain-rename-chat-triage
titan:hermes/voice-stt-tts-language-routing
titan:hermes/voice-stt-language-routing
titan:hermes/tts-voice-multilingual
titan:fix/hermes-chat-session-continuity-contract
titan:hermes/tts-voice-hfc-female
titan:hermes/fix-grafana-no-data-vm-storage
titan:feature/ci-gitops
titan:fix/jenkins-quality-gate-discovery
titan:feature/hermes-inpod-supervisor
titan:feature/hermes-chat-smoothness
titan:wt/t_1e95ea6d
titan:feature/hermes-full-handoff-acceptance
titan:feature/hermes-distributed-worker-pool
titan:feature/hermes-review-goal-semantics
titan:feature/hermes-cli-auto-quota-routing
titan:fix/hermes-result-decomposition-reliability
titan:feature/hermes-safe-gitea-pr-client
titan:feature/hermes-unprivileged-image-builder
titan:feature/hermes-cli-process-reaping
titan:feature/hermes-three-lane-placement
titan:wt/t_cca008de
titan:codex/cassandra-generator-08105
titan:cassandra-0851-rollout
titan:cassandra-0821-deploy
titan:codex/testing-dashboard-health-20260604
titan:feature/ariadne
titan:feature/pi-usb-scratch-rollout
titan:feature/sso-hardening
titan:codex/titan-iac-work-quality-gate
titan:codex/titan-iac-main-platform-metrics
titan:codex/titan-iac-platform-metrics
titan:feature/atlas-jobs-schedule-observability
titan:lane2/jenkins-cleanup-activate
titan:lane2/jenkins-cleanup-wiring-split
titan:codex-ananke-fixes
titan:feature/atlasbot-ananke-recovery
titan:feature/atlasbot
titan:deploy
titan:feature/vault-consumption
titan:feature/postgres-migration
titan:feature/bstein-dev-home
titan:feature/mailu
titan:feature/sso
titan:feature/atlas-monitoring
titan:restructure/hybrid-clusters
titan:fea/titan24-gpu
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
No description provided.
Delete Branch "feature/t_26da4c88-titan-capacity-guardrails-v2"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Supersedes #50 (frozen: the SCM broker is create-only, so #50's branch
cannot be updated in place; #50's committed doc was a stale first-pass
snapshot that didn't include the live-placement findings below — do not
merge #50, close it in favor of this one).
Summary
Evidence-led capacity/QoS audit of titan-20 (Hermes LLM fallback/classifier),
titan-21 (STT/TTS), and titan-22 (Jellyfin media-primary) for Kanban card
t_26da4c88. Full report:docs/titan_20_21_22_capacity_optimization.md.CPU p95 88.6% over the trailing 3h, memory available down to 1.7% at
its floor; titan-21 CPU p95 65%, memory 38-39% available. No workload was
added to either node.
available — even after four workloads (Jenkins, VictoriaMetrics,
Wger, SonarQube) were placed there live by four separate direct
maincommits during this audit (
271f3e8c3,0ebab9d41,17c5f5093),outside this PR and outside any PR — see report §4a. That placement
is not authored by this PR; it is documented and evidence-validated by
it. Jellyfin shows 0 restarts / 0 CPU-throttled periods throughout.
(DCGM encoder/decoder/SM all read 0% for the full 3h), so
"Jellyfin-under-transcode survives these neighbors" is still unproven —
flagged as the concrete open validation item, not claimed as done.
(plain NVIDIA time-slicing, no MPS/MIG) — conditional GPU sharing
(Option C) is evaluated and rejected as unsafe until the cluster has a
GPU-sharing mode with real per-tenant isolation.
victoria-metrics-single-server(the cluster's only metrics backend) is now hard-pinned to the same node
as Jellyfin/Jenkins/Wger/SonarQube — a titan-22 incident would blind the
dashboards needed to diagnose that same incident. Flagged for Brad as a
follow-up decision, not changed here.
criteria, this ships guardrails/dashboard/report only.
Changes
docs/titan_20_21_22_capacity_optimization.md— durable capacity model,workload map, ranked distribution options (A-D), live-placement addendum
(§4a), and validation plan.
services/monitoring/vmalert-atlas-availability.yaml— newatlas.titan-media-capacityalert group: titan-20 node memoryexhaustion, titan-22 CPU/RAM/GPU-VRAM pressure, Jellyfin CPU throttling,
titan-21 CPU pressure.
services/monitoring/grafana-dashboard-gpu.yaml+services/monitoring/dashboards/atlas-gpu.json— two newAtlas GPUpanels (VRAM used/free, NVENC/NVDEC utilization by node), generated via
scripts/render/dashboards_render_atlas.py(re-ran the generator;committed output is byte-identical to what it regenerates).
Rollback plan
Purely additive: one new doc, one new
vmalertrule group (new group name,does not modify or remove any existing group/rule), and two new dashboard
panels appended to the existing
Atlas GPUdashboard (does not modify anyexisting panel). No workload manifests, taints, priority classes, or node
labels are touched by this PR. To roll back, revert this PR's merge commit;
nothing else depends on the new alerts/panels/doc. No live cluster mutation
is performed by merging this PR beyond Flux reconciling the new
vmalert/dashboard ConfigMaps — if the new alert group is noisy, deletethe
atlas.titan-media-capacitygroup block fromvmalert-atlas-availability.yamlin a follow-up PR.Validation
kustomize build services/monitoringsucceeds.python3 scripts/render/dashboards_render_atlas.pyregeneratesgrafana-dashboard-gpu.yaml/atlas-gpu.jsonbyte-identical to what'scommitted.
pytest testing/tests scripts/tests(2814 passed) shows only 14pre-existing failures on
origin/main, none in files this PRtouches and none related to titan-20/21/22 placement/monitoring except
two caused by the same direct
maincommits documented in report §4a(
test_victoria_metrics_has_dashboard_burst_headroom,test_metrics_storage_holds_a_full_retention_period— from271f3e8c3/1e6eda863, not from this PR).this read-only session (
get/list/watchonly, no mutate verbs) cannottrigger one; report §8 documents the plan to run once merged.
Board comments with these conclusions were also posted to
t_39cf1905(Jenkins/WebUI release — Jenkins node-placement blocker looks cleared) and
t_60d2deb6(Chat latency instrumentation — titan-20/21 node pressurecontext + VictoriaMetrics SPOF heads-up).
Leaving as draft for Brad's review per policy; not merging.
Checkout
From your project repository, check out a new branch and test the changes.