watch-costs-and-alarms
Check AWS spend, run the cost report, or investigate CloudWatch alarms, budgets, and the dead-letter queue (cost review, billing check, why is spend up, alarm triage).
SKILL.md.claude/skills/watch-costs-and-alarms/SKILL.md
GitHubWatch costs and alarms
Observability is CloudWatch plus deliberate cost guardrails: structured JSON
logs, seven alarms, a $60/month budget, a $150 billing tripwire, a cost anomaly
monitor, and just cost-report as the monthly cost-review (FinOps) ritual.
Read first
- docs/OBSERVABILITY.md — the alarm table, cost guardrails, symptom-by-symptom triage checklists, and "The honest gaps".
- docs/PRD.md §16 — the FinOps invariants the guardrails implement.
Commands
just cost-report # Cost Explorer, last 30 days, grouped by stack tag + unit-economics KPIs
AWS credentials for account 458443189947. Alarms (search the CloudWatch console by construct name): BillingAlarm (WosCoreStack, > $150), DltDepthAlarm (WosBusStack, ≥ 1 message in SQS wos-events-dlt), four OffsetLagAlarms (archiver/graph-writer/responder/live-publisher, > 1000 for 30 min), Api5xxAlarm (WosApiStack). Budget: wandering-os-monthly, $60, emails mbw@mbw.dev at 50/80/100%.
Gotchas
- As of July 2026 nothing pages anyone: only
BillingAlarmhas an action, and itsCostAlertsSNS topic has zero confirmed subscribers. Budget and anomaly alerts email mbw@mbw.dev directly, without SNS. - Roughly half the spend bills outside AWS — Confluent, Neo4j Aura, Anthropic — so cost-report numbers are AWS-only; vendor consoles are manual paste-ins.
- All alarms treat missing data as not-breaching (the pipeline is idle between trips; silence must not page).
- Dead-letter records hold pointers (topic/partition/offset), not payloads, and expire after 14 days — the S3 archive is the durable copy.
- FinOps invariants are CI-enforced by infra synth tests (tags, budget, no NAT/MSK); any new always-on resource needs a PRD §16.1 cost-table entry in the same PR.