Azure Chaos Studio 場景是在 Chaos Studio 工作空間中模擬中斷模式的韌性測試,例如區域關閉、DNS 中斷及資料庫故障轉移。 每個情境都會針對支援的 Azure 資源組成行動。 工作區會發現其範圍內的資源,並顯示適用的情境。
本頁列出 Chaos Studio 工作空間中可用的劇本。 Chaos Studio 提供一套支援的劇本範本,涵蓋常見的停機模式。 你可以 as-is執行這些範本,或使用 情境設計器 自訂自己的範本。
Important
Chaos Studio 的工作空間與場景目前已公開預覽。 Microsoft 提供此預覽版「現況」與「可用狀態」,不受服務等級協議或有限保固保護。 Microsoft 以盡力而為的方式提供預覽版的客戶支援。 這個預覽並非為製作用途設計。 欲了解更多資訊,請參閱以下文章:
支援的情境範本
以下劇本可在公開預覽中取得。 每個版本都是支援的範本,你可以在不需要自訂設定的情況下執行,除了它需要的參數外。
區域與網路情境
這些情境模擬網路連接與可用性區基礎設施的故障,這是最常見的雲端中斷類別。
DNS 中斷
透過套用網路安全群組(NSG)規則阻擋 DNS 解析,該規則拒絕 53 埠的外出流量。 測試你的應用程式是否能優雅地處理 DNS 失敗,包括備援行為、重試邏輯和快取解析。
| Property | 價值 |
|---|---|
| Actions | NSG ApplyNSGRule(區塊埠 53) |
| 目標資源 | 網路安全小組,虛擬網路 |
| 停電類別 | 網路 |
Microsoft Entra ID Outage
透過套用 NSG 規則,阻止 Microsoft Entra ID 服務標籤的外出流量,阻擋與 Microsoft Entra ID 端點的連線。 測試您的應用程式是否能容忍身份提供者中斷,包括認證失敗、令牌刷新失敗及下游授權連鎖反應。
| Property | 價值 |
|---|---|
| Actions | NSG ApplyNSGRule(封鎖 Entra ID 端點) |
| 目標資源 | 網路安全小組,虛擬網路 |
| 停電類別 | 人脈網絡 / 身份認同 |
計算區域下行
透過關閉目標區域內的虛擬機器及 Azure 虛擬機器擴展集 實例,模擬完整可用性區失效。 可用性區域故障是最具影響力的雲端事件之一,因此此情境成為韌性測試的高優先起點。
對於 AKS 節點縮放集,請使用 Chaos Studio Workspaces 進行 AKS 韌性測試。 此方法測試節點基礎設施,而非叢集內的 Pod 故障。
| Property | 價值 |
|---|---|
| Actions | 虛擬機器關閉(區域過濾器)、虛擬機器縮放集關閉(區域過濾器) |
| 目標資源 | 虛擬機器,虛擬機器擴展集 |
| 停電類別 | 區域 / 資料中心 |
區域下去
關閉目標可用性區內所有發現的 Azure 虛擬機器擴展集 實例,並強制 Azure Cache for Redis 實例進行故障轉移,以模擬後端區域故障。 你可以選擇性地在執行過程中調用自己的 Azure 自動化 跑手冊。 使用 filters.zones 設定篩選器選擇要摧毀的區域。
| Property | 價值 |
|---|---|
| Actions | Virtual Machine Scale Set Shutdown (zone filter), Azure Cache for Redis force failover (reboot primary node), optional Azure 自動化 runbooks |
| 目標資源 | 虛擬機器擴展集, Azure Cache for Redis |
| 停電類別 | 區域 / 資料中心 |
資料庫場景
資料庫情境測試你的應用程式如何處理資料層的中斷。 有些會將區域層級的計算失敗與資料庫故障轉移(稱為計算區域下行變體)結合,以同時驗證跨區域與資料層的韌性;其他則在應用程式處於主動負載時,驅動獨立的資料庫故障轉移或重啟。 每個測試都測試你的應用程式是否在恢復時間目標(RTO)內恢復,包括連線重試、池池耗盡,以及中斷後的資料一致性。
Compute Zone Down + PostgreSQL 故障轉移
它以 適用於 PostgreSQL 的 Azure 資料庫 靈活伺服器故障轉移來擴展 Compute Zone Down 場景。
| Property | 價值 |
|---|---|
| Actions | VM 關機(區域過濾器)、虛擬機器 Scale Set 關機(區域過濾器)、PostgreSQL 彈性伺服器故障轉移 |
| 目標資源 | 虛擬機器, 虛擬機器擴展集, 適用於 PostgreSQL 的 Azure 資料庫 flexible server |
| 停電類別 | 區域 / 資料中心 + 資料 |
計算區域關閉 + SQL DB 故障轉移
透過 Azure SQL Database 地理複製故障轉移,擴展計算區域關閉情境。
| Property | 價值 |
|---|---|
| Actions | Virtual Machine Scale Set Shutdown (zone filter), VM Shutdown (zone filter), Azure SQL Database geo-failover |
| 目標資源 | 虛擬機器擴展集, 虛擬機器, Azure SQL Database |
| 停電類別 | 區域 / 資料中心 + 資料 |
計算區關閉 + SQL 受管理執行個體 故障轉移
它透過 Azure SQL 受控執行個體 故障轉移擴展了 Compute Zone Down 的情境。
| Property | 價值 |
|---|---|
| Actions | VM 關機(區域過濾器)、虛擬機器 Scale Set 關機(區域過濾器)、SQL 受管理執行個體 故障轉移 |
| 目標資源 | 虛擬機器, 虛擬機器擴展集, Azure SQL 受控執行個體 |
| 停電類別 | 區域 / 資料中心 + 資料 |
DB 負載故障轉移
觸發 適用於 MySQL 的 Azure 資料庫 的彈性伺服器強制故障轉移,同時執行 Azure 負載測試 將流量推向你的應用程式,讓你能在實際負載下驗證資料層的韌性。 當執行結束時,MySQL 伺服器會恢復到原始狀態。
| Property | 價值 |
|---|---|
| Actions | Azure 負載測試 Start, MySQL Flexible Server forced failover |
| 目標資源 | 適用於 MySQL 的 Azure 資料庫 flexible server, Azure 負載測試 |
| 停電類別 | 資料 / 載荷 |
資料庫重啟負載
重新啟動 適用於 MySQL 的 Azure 資料庫 的彈性伺服器,同時執行 Azure 負載測試 流量,測試應用程式在負載下如何處理突如其來的資料庫重啟。
| Property | 價值 |
|---|---|
| Actions | Azure 負載測試 Start, MySQL Flexible Server Restart |
| 目標資源 | 適用於 MySQL 的 Azure 資料庫 flexible server, Azure 負載測試 |
| 停電類別 | 資料 / 載荷 |
快取韌性情境
這些情境測試應用程式如何處理快取失敗,包括快取連續模式,即多個用戶端同時嘗試重建過期或遺失的快取條目。
藏寶大賽
模擬快取狂奔,方法是清除 Azure Managed Redis 快取並同時重新啟動資料庫和 App Service 實例,讓同時的用戶端一起退回到原始資料儲存。 測試應用程式的請求合併、退縮與負載限制邏輯是否能防止原始節點過載。
| Property | 價值 |
|---|---|
| Actions | Azure Managed Redis FlushDatabase, MySQL Flexible Server Restart, App Service Restart |
| 目標資源 | Azure Managed Redis, 適用於 MySQL 的 Azure 資料庫 flexible server, App Service |
| 停電類別 | 快取 / 載入 |
快取衝刺與程序崩潰
結合快取衝刺與 App Service 程序崩潰,測試快取層與計算實例同時失敗時的復原。 這個變體是終止 App Service 程序,而不是重新啟動它。
備註
此情境僅支援 Windows 應用程式 服務。 Linux App Service 不被支援。
| Property | 價值 |
|---|---|
| Actions | Azure Managed Redis FlushDatabase, MySQL Flexible Server Restart, App Service Kill Process |
| 目標資源 | Azure Managed Redis, 適用於 MySQL 的 Azure 資料庫 flexible server, App Service (Windows) |
| 停電類別 | 快取 / 載入 |
訊息傳遞與事件驅動情境
這些情境測試當訊息服務或相關相依性無法使用時,應用程式的回應。
Event-Driven 訊息中斷
停用 服務匯流排 佇列與事件樞紐實體,以測試您的事件驅動微服務架構如何處理訊息基礎設施故障。 驗證死訊處理、重試政策及後壓機制。
| Property | 價值 |
|---|---|
| Actions | 服務匯流排 ChangeQueueState (停用)、Event Hubs ChangeEventHubState (停用) |
| 目標資源 | 服務匯流排 命名空間,Event Hubs 命名空間 |
| 停電類別 | Messaging |
當執行結束時,Chaos Studio 會自動重新啟用受影響的 服務匯流排 佇列和事件集線中心實體。
依賴性黑屏
同時模擬身份、訊息與事件中上游依賴的相關中斷:它以網路安全群組(NSG)規則阻擋 Azure Key Vault 的存取,並停用 服務匯流排 佇列與事件集線中心實體。 用它來驗證對同時依賴失敗的韌性。 當執行結束時,所有中斷都會自動還原:訊息與事件狀態的變更會自我修復,NSG 封鎖規則也會被移除。
| Property | 價值 |
|---|---|
| Actions | NSG ApplyNSGRule (block Azure Key Vault), 服務匯流排 ChangeQueueState (disable), Event Hubs ChangeEventHubState (disable) |
| 目標資源 | 網路安全群組、服務匯流排 命名空間、事件集線中心命名空間 |
| 停電類別 | 相依性(身份、訊息、事件處理) |
計算與資源壓力情境
這些情境模擬虛擬機上的資源枯竭。
CPU 壓力
在目標虛擬機內持續施加 CPU 壓力,以驗證應用程式在 CPU 爭用時的行為。 你設定壓力等級(百分比)和持續時間。
備註
CPU 壓力是一種基於代理的情境:故障透過 Chaos Studio 代理在虛擬機內部執行。 Chaos Studio 會在執行過程中自動安裝代理擴充功能,之後再移除。 關於目標虛擬機與作業系統需求,請參見 基於代理的情境需求。
| Property | 價值 |
|---|---|
| Actions | CPU 壓力(基於代理) |
| 目標資源 | 虛擬機器(僅限獨立) |
| 停電類別 | 資源壓力 |
實體記憶體壓力
在記憶體爭用下,會消耗目標虛擬機內的實體記憶體,以驗證應用程式的行為。 你設定壓力等級(百分比)和持續時間。
備註
物理記憶體壓力是一種基於代理的情境:故障透過 Chaos Studio 代理在虛擬機內部執行。 Chaos Studio 會在執行過程中自動安裝代理擴充功能,之後再移除。 關於目標虛擬機與作業系統需求,請參見 基於代理的情境需求。
| Property | 價值 |
|---|---|
| Actions | 物理記憶體壓力(基於代理) |
| 目標資源 | 虛擬機器(僅限獨立) |
| 停電類別 | 資源壓力 |
基於代理的情境需求
大多數情境使用服務直接動作,透過 Azure 管理 API 對資源進行操作。 基於代理的情境,如 CPU 壓力與物理記憶體壓力,則會在目標虛擬機內透過 Chaos Studio 代理執行錯誤。 Chaos Studio 會在執行開始時自動安裝代理擴充功能,執行結束時移除,所以你不需要自己安裝或管理代理。
每個目標虛擬機必須符合以下要求:
- 它是獨立的虛擬機。 虛擬機縮放組目前還不支援。
- 它擁有管理身份。
- 它運行支援的作業系統。
- 它可以透過公共外撥連線連接到 Chaos Studio 服務。 僅限於私有網路的虛擬機不被支援。
若情境執行在代理安裝步驟失敗,通常表示網路設定阻擋了代理的連線。 請參見「連接混沌代理人與 Chaos Studio 的問題」。
在 Azure 入口網站中,基於代理的情境不會出現在推薦情境清單中。 從 我的情境中找到並執行它們。
支援的作業系統
基於代理的情境支援 Windows 與 Linux 虛擬機。 使用 Arm 架構處理器的虛擬機大小尚未支援。 在 Linux 上,錯誤行為會在以下發行版進行驗證:
| 分配 | 支援的版本 |
|---|---|
| Ubuntu | 22.04及之後 |
| Debian | 11 和之後的版本 |
| Red Hat Enterprise Linux | 8.6 及以後版本 |
| Oracle Linux | 8.4 及以後版本 |
其他發行版或版本可能可行,但它們沒有被驗證,Chaos Studio 也無法保證它們的行為。
建立自訂情境
當支援的範本不符合你需要時,可以在 Azure 入口網站用 Chaos Studio 情境設計器自訂自己的情境。 你可以從範本開始,調整其動作和參數,並儲存命名的設定,之後可以執行或編輯。 若要以程式方式撰寫情境,請將其定義為 Microsoft.Chaos/workspaces/scenarios 資源(參見 「自訂情境的結構化」)。
在入口網站使用情境設計器
在你的工作區中,選擇左側導覽中的 「設計師 」。
搜尋或瀏覽最接近你想要的停電模式範本,然後選擇 使用範本。 範本依類別分組,如計算(Compute)與資料庫(Database)。
設計師會在一個畫布上打開範本,畫布上顯示動作及其執行方式。 例如,Compute Zone Down 範本會同時執行兩個動作:
vmssZoneShutdown和vmZoneShutdown,每個動作持續 15 分鐘。
在 配置情境 面板中,設定 情境名稱,賦予配置 名稱,並設定 配置參數 (例如持續時間及目標區域)。 一個情境可以容納多個命名配置。
選擇 建立 以儲存劇本。 已儲存的情境會出現在 「我的情境」裡,你可以執行或編輯設定。
自訂劇本的結構
情境是一種 Microsoft.Chaos/workspaces/scenarios 資源。 每個情境包含:
-
動作:一個或多個定義劇本編排的動作。 每個動作以其 URN 參考動作類型(例如 ),
urn:csci:microsoft:compute:shutdown/1.0.0執行 ISO 8601 標準 (例如PT30M30 分鐘),並採用動作特定的 參數。 -
參數:呼叫者在執行時提供的情境層級參數,例如要鎖定哪個可用區域。 每個參數都有名稱、一個型別(
string、numberbooleanarray或object)、一個可選的預設值,以及一個required旗標。 在動作中以巨集語法%%{parameters.<name>}%%參照參數。 -
相依性:使用動作的
runAfter屬性來控制序列。 你指定要等待的動作、觸發下一個動作的生命週期狀態(Start, ,RunningSuccess,FailureSkipped, , 或AnyTerminal),以及如何評估多個相依關係(All,Any, 或AtLeastOne)。 你也可以設定waitBefore延遲行動並timeout限制執行時間。
這個模型讓你能重現連鎖故障。 例如,關閉一個區域,等待其生效,然後在計算中斷持續進行後才觸發資料庫故障轉移。
範例:Bicep 自訂情境
以下 Bicep 定義了一個情境,該情境會在參數化可用性區域關閉虛擬機,並在關閉執行後,在 PostgreSQL 彈性伺服器上失效:
resource customScenario 'Microsoft.Chaos/workspaces/scenarios@2026-05-01-preview' = {
parent: workspace
name: 'zone-down-then-db-failover'
properties: {
description: 'Shut down a zone, then fail over the database.'
parameters: [
{
name: 'zone'
type: 'string'
required: true
description: 'Availability zone to take down.'
}
]
actions: [
{
name: 'shutdown-zone'
actionId: 'urn:csci:microsoft:compute:shutdown/1.0.0'
description: 'Shut down VMs in the target zone.'
duration: 'PT10M'
parameters: [
{
key: 'zones'
value: '%%{parameters.zone}%%'
}
]
}
{
name: 'db-failover'
actionId: 'urn:csci:microsoft:azurePostgreSql:failover/1.0.0'
description: 'Fail over the PostgreSQL flexible server.'
duration: 'PT5M'
runAfter: {
behavior: 'All'
items: [
{
type: 'Action'
name: 'shutdown-zone'
onActionLifecycle: 'Running'
}
]
}
}
]
}
}
動作 ID 是形式為 urn:csci:microsoft:{service}:{action}/{version}的 URN 。 完整資源結構,包括所有動作與參數屬性,請參閱 Microsoft。混沌/工作區/場景範本參考。 使用支援的 情境範本 和情境設計器來識別工作區的動作。 實驗(經典版)的獨立目錄不會在工作區中建立動作可用性;請參閱 資源模型比較。
決定哪些情境會出現在你的工作區
Chaos Studio 會根據工作區範圍將場景與資源配對。 如果你的範圍包含該情境行動所影響的資源類型,則該情境會出現在你的函式庫中。 對於跨資源類型組合多個動作的情境(例如計算區關閉 + PostgreSQL 故障轉移情境),所有必要的資源類型必須在作用域中出現。
如果你在工作空間範圍內部署新資源,它們會自動被發現,新的情境可能會出現在你的函式庫中。
劇本目錄也會在公開預覽期間定期擴充。 當新的情境範本發佈時,若套用於你範圍內的資源類型,它們會自動出現在你的函式庫中;你不需要採取行動。 若要請求情境或故障,請提交 功能請求。
資源排除
當你設定情境時,可以排除特定資源。 資源排除功能讓你能保護關鍵資源(例如生產資料庫或共用跳板盒),同時仍能將情境與範圍內其他所有資源共同執行。 排除項目會根據情境設定,因此你可以在不改變工作區範圍的情況下微調每個測試。
回報問題與請求功能
Azure Chaos Studio 是公開開發的。 若要回報錯誤、請求功能,或詢問有關 Workspaces、Scenarios 或 Azure CLI 擴充功能的問題,請在 GitHub 的 Chaos Studio 倉庫開啟一個問題。 透過提交問題,您可以追蹤其進度並查看其他客戶的請求。