chaos-study
Guided help for running a Chaos Studio study against an Azure workspace scope: frame a steady-state question with you, discover live which actions Chaos Studio offers for that region, freeze a plan, run a validated scenario configuration only with your explicit consent, collect the before/during/after signals you chose, and write a self-contained HTML report for your review. Start here for questions like 'what happens to my service when X?' or 'is my service resilient to X?'.
- License 许可
- MIT
- 最近更新
- 2026-10-28
- Stars
- ★ 3
- Forks
- 4
01 前言 Front Matter
- name
- chaos-study
- description
- Guided help for running a Chaos Studio study against an Azure workspace scope: frame a steady-state question with you, discover live which actions Chaos Studio offers for that region, freeze a plan, run a validated scenario configuration only with your explicit consent, collect the before/during/after signals you chose, and write a self-contained HTML report for your review. Start here for questions like 'what happens to my service when X?' or 'is my service resilient to X?'.
02 资源文件 31
- 参考文档backends/atr.md751 B
- 参考文档backends/git.md1.5 KB
- 参考文档backends/svnpubsub.md875 B
- 参考文档outcomes/blocked-key.md1.2 KB
- 参考文档outcomes/key-rolled.md921 B
- 参考文档outcomes/noop.md423 B
- 参考文档prerequisites.md1.2 KB
- 参考文档references.md1.4 KB
- 参考文档references/design-method.md7.2 KB
- 参考文档references/report-contract.md4.6 KB
- 参考文档references/study-method.md9.6 KB
- 脚本scripts/Invoke-ChaosStudy.ps137.6 KB
- 脚本scripts/lib/AbortCriteria.ps115.3 KB
- 脚本scripts/lib/Adapters.ps134.1 KB
- 脚本scripts/lib/ApiVersions.ps13.4 KB
- 脚本scripts/lib/AzCli.ps117.5 KB
- 脚本scripts/lib/Common.ps128.5 KB
- 脚本scripts/lib/ConfigurationPayload.ps18.6 KB
- 脚本scripts/lib/ExecutionPlan.ps127.8 KB
- 脚本scripts/lib/Exercise.ps114.6 KB
- 脚本scripts/lib/FaultDuration.ps111.2 KB
- 脚本scripts/lib/Operation.ps122.1 KB
- 脚本scripts/lib/Provenance.ps17.8 KB
- 脚本scripts/lib/Render.ps115.0 KB
- 脚本scripts/lib/Residue.ps138.8 KB
- 脚本scripts/lib/SignalIdentity.ps116.9 KB
- 脚本scripts/lib/Study.ps130.1 KB
- 脚本scripts/lib/Versioning.ps16.4 KB
- 参考文档tests/fixtures/live-run-list-35f214c.json101.8 KB
- 脚本tests/PollCadence.Tests.ps113.4 KB
- 脚本tests/RunPhaseFixes.Tests.ps119.5 KB
03 SKILL.md 正文
chaos-study — guided Chaos studies, end to end
Chaos engineering works best as an experiment. This skill helps structure one: it starts from a question the run could answer no to, runs one action against your resources only with your consent, and reports the signals it collected for you to review.
Does
<steady state>hold when I execute<action>across<workspace scope>?
You do not need that sentence to start — the front door builds it with you. "Test resilience" is not a study: nothing could falsify it.
Principles
A study is a falsifiable claim. Every study needs a steady-state predicate measurable beforehand that could plausibly break during the run.
What to test is decided before it is scoped, and never by this skill alone. Picking an action because it is available is how studies end up proving nothing. The front door therefore always runs design first: it reads the system, then stops and asks you, one question at a time, until the purpose and the risk you will accept are stated in your own words and confirmed. There is no flag that skips the interview.
The platform decides what is possible, not this plugin. The available
actions are read live from Chaos Studio for the workspace's region, every time.
This suite ships no action catalogue, and there is no offline fallback: if
the service cannot be asked, scoping stops with exit 16 rather than guessing.
Likewise the resources a run will touch come from the workspace's discovered
resources, not from an assertion in the plan.
Evidence beats vibes. A verdict is only as good as the signals behind it. If
a signal was not collected, the report says not measured — never 0, never a
plausible-looking guess.
Nothing runs without consent. -DryRun defaults to $true. Arming a study
takes both -DryRun:$false and typing back the exact phrase the plan prints.
There is no flag that skips this.
Blast radius is bounded before it is armed. Workspace, scope, filters, exclusions, action, parameters and duration are frozen into the plan and hashed. If the plan changed after you approved it, the run refuses.
The six skills
This is a suite, not a monolith. Use the front door — it is the only path that enforces the design gate. Calling a phase skill directly is the expert escape hatch and skips that enforcement deliberately.
| Skill | Owns |
|---|---|
| chaos-study | chains the phases below; the default entry point |
| chaos-study-design | reading the system, interviewing you, recommending what to test |
| chaos-study-scope | workspace, scope, live action discovery, freezing the plan |
| chaos-study-run | configuration, validation, consent, execution, evidence |
| chaos-study-report | interpretation, findings, the HTML report |
| chaos-study-history | list, compare, and re-run past studies |
Each phase persists its own output, so a chain that fails partway resumes there.
Usage
1. Name the system. That is all you start with. The front door always opens the design phase first: it reads the system, ranks candidate hypotheses against real dependency edges, then holds the study at exactly one question:
./scripts/Invoke-ChaosStudy.ps1 -System orders-api `
-SubscriptionId $sub -ResourceGroup rg-prod -WorkspaceName ws-payments
Exit 26 means the study is open and waiting on a person — not that it
failed. One question is printed, and repeated in a CHAOS-QUESTION JSON block.
Put that question to the customer with ask_user (or your host's equivalent
interactive mechanism), wait for the reply, then resume the same brief:
./scripts/Invoke-ChaosStudy.ps1 -System orders-api -BriefId <id> `
-QuestionId <id from the block> -Answer '<what they actually said>'
One question per turn. Do not batch them, do not print a questionnaire, do not
answer on the customer's behalf, and do not fall through to scoping. Exit 24
means the answer was too vague to test and the same question is still open.
Passing -Scenario/-Action up front does not bypass any of this: nothing
is scoped until the brief is CONFIRMED by the customer.
2. Ask the platform what it can do here. The answer depends on the region and what is in scope, and changes as Chaos Studio ships new actions:
./scripts/Invoke-ChaosStudy.ps1 -ListActions `
-SubscriptionId $sub -ResourceGroup rg-prod -WorkspaceName ws-payments
# ...and -ListScenarios for the scenarios the workspace recommends
Each action is printed with its canonical id, type, what it applies to and its parameter schema — all as the service reported them.
3. Plan and preview. Once the brief is confirmed the same command carries on
into scoping and stops there, executing nothing. Read the preview: what is in
scope after filters and exclusions, the windows, and the configuration that
would be created. Overrides such as -SteadyState apply on top of the brief.
4. Arm it. Only after the preview matches your intent:
./scripts/Invoke-ChaosStudy.ps1 ... -DryRun:$false -Consent '<phrase from the preview>'
Reading the verdict
| Verdict | Means |
|---|---|
| Steady state held | The action landed and the objective survived it |
| Degraded but recovered | Breached during the run, recovered afterwards |
| Steady state breached | Breached and still breached after recovery |
| Not exercised | The action never applied enough work to test anything |
| Inconclusive | The action could not be proven to have landed |
Severity follows recovery, not drama: a breach that never recovers is critical;
the same breach that self-heals is medium.
Choosing signals
The suite collects only what you name, because what counts as evidence depends on the system under study. Two forms:
metrics:<name>— an Azure Monitor metric on the single scoped resource, or@<resourceId>to pin one,|<aggregation>to override the aggregation. A scope holding several resources has no implied metric target, so pin it.logs:<workspaceId>#<kql>— a Log Analytics query
Name at least one signal expected to move under the action. That is what
separates "resilient" from "the action never landed". Scoping checks readiness
first: a study whose objective cannot be measured, or whose parameters do not
satisfy the live schema, teaches nothing, so exit 10 is a real answer.
Progressive discovery
Action identifiers, parameters and required permissions are not documented
here, because they are the service's to state and this plugin's to relay. Get
them from -ListActions — Kubernetes/AKS guidance is deliberately absent until
those actions appear there. What lives here is the method:
references/design-method.md— how a study is chosen before it is scopedreferences/study-method.md— the six-phase method and why it is splitreferences/report-contract.md— what the report may and may not claim
Exit codes
| Code | Meaning |
|---|---|
0 |
Success |
1 |
Error |
4 |
Reserved by the shipped chaos skills (broad fix unconsented) — this suite never emits it |
10 |
Readiness gates failed |
11 |
Consent declined or phrase mismatch |
12 |
Plan changed after it was frozen |
13 |
Study or brief already sealed |
14 |
Scope unverified — nothing in scope, or the action does not fit it |
15 |
Studies not comparable |
16 |
Live action discovery unavailable — there is no fallback |
17 |
Scenario configuration failed validation |
18 |
Paused: an Azure operation must be executed by the host, then resumed |
19 |
Paused: role assignments need their own, separate approval |
20 |
Scenario would run fewer legs than it declares, and that was not accepted |
21 |
The run would not exercise the failure often enough to mean anything |
22 |
No adapter can reach Azure — say which one to use |
23 |
Study was written by an older contract version |
24 |
Design incomplete — an unread area, a vague answer, or a missing field |
25 |
A past study cannot be re-run exactly, so no command was printed |
26 |
Paused: waiting on the customer. One question is open — ask it |
18, 19 and 21 are pauses, not failures. Each names the one thing it
needs; supply it and re-run the same command. Do not fill in the missing part
yourself — a study that cannot show where its evidence came from cannot be sealed.
Running where az is not usable
Every Azure call goes through one adapter seam, selected with -Adapter:
local-az runs az in-process; external cannot, so it writes each operation
into the study's operations/ directory and exits 18. Under external you are
the executor: read the pending request, run exactly that call with your own
authenticated tooling, write the response back as the matching result file, and
re-run the identical command. Results are bound to the request hash and folded
into the study's provenance; resuming is idempotent.
Notes
- Chaos Studio V2 only: workspaces are the lifecycle root and resource selection flows through workspace scopes. There is no V1 path or fallback.
- Core is
az/ Azure Resource Manager: no SRE Agent or MCP dependency. - Sealed studies are immutable — re-testing scopes a new study.
-Parameters(scenario),-ActionParameters(action),-AcknowledgeFaultDurationSecondsand-AbortCriteria(the customer's stop rule:@{ statement; source = 'customer'; signal; condition; resourceCorrelation }) all cross the front door.
04 同仓库更多 Skills
start-chaos
Orchestrate the full Chaos Studio v2 workflow: auth → workspace → scenario → run. Shares a single state file and supports resume.
setup-scenario
Discover recommended scenarios, build and validate a ScenarioConfiguration, and auto-fix resource permissions.
run-scenario
Execute a ScenarioConfiguration and stream ScenarioRun status with per-action breakdown until terminal state.
create-workspace
Provision a Microsoft.Chaos/workspaces resource (v2), bind a managed identity, set scopes, and grant Reader RBAC on the scope.
chaos-study-scope
Frame a Chaos study before anything runs: resolve or create a Chaos Studio V2 workspace, read the resources the service discovered inside its scopes, discover live which actions and scenarios are available for that region, express a falsifiable steady-state predicate, verify the action fits what is in scope, then freeze and hash the study plan.
chaos-study-run
Execute a frozen Chaos study plan against Azure using Chaos Studio V2: verify plan integrity, create and validate a scenario configuration, require an explicit typed consent phrase, collect baseline evidence, execute the scenario run, collect during and post-recovery evidence, and always clean up the configuration. Dry-run by default.