az-cost-optimize

az-cost-optimize

熱門

分析應用程式所使用的 Azure 資源(IaC 檔案及/或目標資源群組中的資源)並進行成本最佳化,同時針對識別出的最佳化項目建立 GitHub Issues。

3.7萬星標
4569分支
更新於 2026/7/14
SKILL.md
唯讀
名稱
az-cost-optimize
描述

分析應用程式所使用的 Azure 資源(IaC 檔案及/或目標資源群組中的資源)並進行成本最佳化,同時針對識別出的最佳化項目建立 GitHub Issues。

Azure 成本最佳化 (Azure Cost Optimize)

此工作流程會分析程式碼化基礎架構 (IaC) 檔案與 Azure 資源,並產生成本最佳化建議。它會針對每個最佳化機會建立單獨的 GitHub Issue,並額外建立一個 EPIC Issue 來統一協調執行,實現高效率的成本削減追蹤與執行。

先決條件

  • 已設定並完成驗證的 Azure MCP server
  • 已設定並完成驗證的 GitHub MCP server
  • 已指定目標 GitHub 儲存庫 (Repository)
  • 已部署 Azure 資源(IaC 檔案為選填,但有助於分析)
  • 只要有可用的 Azure MCP 工具 (azmcp-*),優先使用 MCP 工具而非直接呼叫 Azure CLI

工作流程步驟

步驟 1:取得 Azure 最佳做法

操作:在分析前取得成本最佳化最佳做法
工具:Azure MCP 最佳做法工具
流程

  1. 載入最佳做法
    • 執行 azmcp-bestpractices-get 以取得最新部分的 Azure 最佳化指引。這可能無法涵蓋所有情境,但能提供基礎依據。
    • 盡可能利用這些做法來協助後續的分析與建議。
    • 在最佳化建議中引用最佳做法,可取自 MCP 工具輸出或一般的 Azure 官方文件。

步驟 2:探索 Azure 基礎架構

操作:動態探索並分析 Azure 資源與設定
工具:Azure MCP 工具 + Azure CLI 備用機制 + 本地檔案系統存取
流程

  1. 資源探索

    • 執行 azmcp-subscription-list 找尋可用的訂閱 (Subscriptions)
    • 執行 azmcp-group-list --subscription <subscription-id> 找尋資源群組 (Resource Groups)
    • 取得相關資源群組中的所有資源清單:
      • 使用 az resource list --subscription <id> --resource-group <name>
    • 針對每種資源類型,優先使用 MCP 工具,若無則退回使用 CLI:
      • azmcp-cosmos-account-list --subscription <id> - Cosmos DB 帳號
      • azmcp-storage-account-list --subscription <id> - 儲存體帳號 (Storage accounts)
      • azmcp-monitor-workspace-list --subscription <id> - Log Analytics 工作區
      • azmcp-keyvault-key-list - Key Vaults 金鑰庫
      • az webapp list - Web Apps(備用 - 無可用 MCP 工具)
      • az appservice plan list - App Service 計劃(備用)
      • az functionapp list - Function Apps(備用)
      • az sql server list - SQL 伺服器(備用)
      • az redis list - Redis 快取(備用)
      • ...其他資源類型以此類推
  2. IaC 偵測

    • 使用 file_search 掃描 IaC 檔案:"/*.bicep", "/*.tf", "/main.json", "/template.json"
    • 解析資源定義以了解預期的組態設定
    • 與探索到的實際資源進行對比,找出差異
    • 標記 IaC 檔案的存在,以便後續提出實施建議
    • 切勿使用專案儲存庫中的任何其它檔案,僅限使用 IaC 檔案。嚴禁使用其它檔案,因為它們並非事實來源 (Source of truth)。
    • 如果未搜尋到任何 IaC 檔案,請立即停止並向使用者回報未找到 IaC 檔案。
  3. 組態設定分析

    • 擷取各項資源的當前 SKU、層級 (Tiers) 與設定
    • 識別資源之間的關聯性與相依性
    • 在可取得數據的情況下,對應資源使用率模式

步驟 3:收集使用率指標並驗證當前成本

操作:收集使用率數據並驗證實際資源成本
工具:Azure MCP 監控工具 + Azure CLI
流程

  1. 尋找監控來源

    • 使用 azmcp-monitor-workspace-list --subscription <id> 尋找 Log Analytics 工作區
    • 使用 azmcp-monitor-table-list --subscription <id> --workspace <name> --table-type "CustomLog" 探索可用數據
  2. 執行使用率查詢

    • 使用 azmcp-monitor-log-query 搭配以下預定義查詢:
      • 查詢語句:"recent" 查閱近期活動模式
      • 查詢語句:"errors" 查閱表示有問題的錯誤層級記錄
    • 如需自訂分析,請使用 KQL 查詢:
    // App Services CPU 使用率
    AppServiceAppLogs
    | where TimeGenerated > ago(7d)
    | summarize avg(CpuTime) by Resource, bin(TimeGenerated, 1h)
    
    // Cosmos DB RU 消耗量
    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DOCUMENTDB"
    | where TimeGenerated > ago(7d)
    | summarize avg(RequestCharge) by Resource
    
    // 儲存體帳號存取模式
    StorageBlobLogs
    | where TimeGenerated > ago(7d)
    | summarize RequestCount=count() by AccountName, bin(TimeGenerated, 1d)
    
  3. 計算基準指標

    • CPU/記憶體平均使用率
    • 資料庫吞吐量模式
    • 儲存體存取頻率
    • Function 執行率
  4. 驗證當前成本

    • 利用步驟 2 探索到的 SKU/層級設定
    • https://azure.microsoft.com/pricing/ 查詢最新 Azure 定價,或使用 az billing 指令
    • 記錄:資源 → 當前 SKU → 估算每月成本
    • 在提出建議前,計算出合理的當前每月總支出

步驟 4:產生成本最佳化建議

操作:分析資源以識別最佳化機會
工具:利用收集到的數據進行本地分析
流程

  1. 根據找到的資源類型套用最佳化模式

    算力最佳化 (Compute Optimizations)

    • App Service Plans:根據 CPU/記憶體使用率調整至合適規格 (Right-size)
    • Function Apps:使用率較低時,由 Premium 方案調整為 Consumption(按用量計費)方案
    • 虛擬機器 (Virtual Machines):將規格過大的執行執行個體調降規模 (Scale down)

    資料庫最佳化 (Database Optimizations)

    • Cosmos DB:
      • 變動工作負載由 Provisioned(預置)調為 Serverless(無伺服器)
      • 根據實際使用量調整合宜的 RU/s 規格
    • SQL Database:根據 DTU 使用率調整合宜的服務層級

    儲存體最佳化 (Storage Optimizations)

    • 實施生命週期策略(Hot 熱 → Cool 冷 → Archive 封存)
    • 整合冗餘的儲存體帳號
    • 根據存取模式調整合宜的儲存層級

    基礎架構最佳化 (Infrastructure Optimizations)

    • 移除未使用的冗餘資源
    • 在有益處的情境下實施自動擴縮 (Auto-scaling)
    • 針對非生產環境設定排程關機
  2. 計算有據可循的節省金額

    • 當前已驗證成本 → 目標成本 = 節省金額
    • 記錄當前與目標設定的定價參考來源
  3. 計算各項建議的優先度分數 (Priority Score)

    優先度分數 = (價值分數 × 每月節省金額) / (風險分數 × 實施所需天數)
    
    高優先度:分數 > 20
    中優先度:分數 5-20
    低優先度:分數 < 5
    
  4. 驗證建議

    • 確保 Azure CLI 指令準確無誤
    • 校驗估算的節省金額計算
    • 評估實施風險與前置條件
    • 確保所有節省金額計算皆有佐證數據支持

步驟 5:使用者確認

操作:在建立 GitHub issues 前展示摘要並取得授權
流程

  1. 顯示最佳化摘要

    🎯 Azure 成本最佳化摘要
    
    📊 分析結果:
    • 已分析資源總數:X
    • 當前每月成本:$X 
    • 預估每月可節省:$Y 
    • 最佳化機會數量:Z
    • 高優先度項目:N
    
    🏆 建議列表:
    1. [資源名稱]: [當前 SKU] → [目標 SKU] = 每月節省 $X - [風險層級] | [實施工作量]
    2. [資源名稱]: [當前設定] → [目標設定] = 每月節省 $Y - [風險層級] | [實施工作量]
    3. [資源名稱]: [當前設定] → [目標設定] = 每月節省 $Z - [風險層級] | [實施工作量]
    ...以此類推
    
    💡 即將建立:
    • Y 個獨立 GitHub issues(每個最佳化項目一個)
    • 1 個 EPIC issue 用以統籌協調實施
    
    ❓ 是否繼續建立 GitHub issues?(y/n)
    
  2. 等待使用者確認:僅在使用者確認許可後才繼續執行

步驟 6:建立獨立最佳化 Issue

操作:針對每個最佳化機會建立單獨的 GitHub issue。為其加上 "cost-optimization"(綠色)與 "azure"(藍色)標籤。
所需的 MCP 工具:針對每項建議呼叫 create_issue
流程

  1. 使用此範本建立獨立 Issue

    標題格式[COST-OPT] [資源類型] - [簡短說明] - 每月節省 $X

    內文範本

    ## 💰 成本最佳化:[簡短標題]
    
    **每月節省金額**:$X | **風險層級**:[低/中/高] | **實施工作量**:X 天
    
    ### 📋 案由說明
    [清晰解釋最佳化方案及其必要性]
    
    ### 🔧 實施步驟
    
    **已偵測到 IaC 檔案**:[是/否 - 依據 file_search 頁面結果]
    
    ```bash
    # 若找到 IaC 檔案:展示 IaC 修改內容 + 部署指令
    # 檔案:infrastructure/bicep/modules/app-service.bicep
    # 變更:sku.name: 'S3' → 'B2'
    az deployment group create --resource-group [rg] --template-file infrastructure/bicep/main.bicep
    
    # 若未找到 IaC 檔案:直接使用 Azure CLI 指令 + 警示
    # ⚠️ 未找到 IaC 檔案。若檔案保存在其它位置,請改為修改該處的檔案。
    az appservice plan update --name [plan] --sku B2
    

    📊 佐證依據

    • 當前組態設定:[詳細資訊]
    • 使用模式:[監控數據佐證]
    • 成本影響:$X/月 → $Y/月
    • 最佳做法符合度:[若適用,附上 Azure 最佳做法參考說明]

    ✅ 驗證步驟

    • [ ] 在非生產環境中進行測試
    • [ ] 確認效能未受影響降級
    • [ ] 在 Azure 成本管理中確認成本確實降低
    • [ ] 視需要更新監控與告警

    ⚠️ 風險與注意事項

    • [風險 1 及其緩解措施]
    • [風險 2 及其緩解措施]

    優先度分數:X | 價值:X/10 | 風險:X/10

    
    

步驟 7:建立 EPIC 統籌 Issue

操作:建立主 Issue (Master Issue) 以追蹤所有最佳化工作。為其加上 "cost-optimization"(綠色)、"azure"(藍色)及 "epic"(紫色)標籤。
所需的 MCP 工具:針對 EPIC 呼叫 create_issue
關於 Mermaid 圖表注意事項:請務必校驗 mermaid 語法無誤,並在繪製圖表時兼顧可存取性規範(樣式、顏色等)。
流程

  1. 建立 EPIC Issue

    標題[EPIC] Azure 成本最佳化專案 - 預計每月可節省 $X

    內文範本

    # 🎯 Azure 成本最佳化 EPIC
    
    **預估每月節省總額**:$X/月 | **實施時程**:X 週
    
    ## 📊 執行摘要
    - **已分析資源**:X
    - **最佳化機會**:Y  
    - **每月潛在節省總額**:$X
    - **高優先度項目**:N
    
    ## 🏗️ 當前架構概觀
    
    ```mermaid
    graph TB
        subgraph "Resource Group: [name]"
            [產生的架構圖,呈現當前資源與成本]
        end
    

    📋 實施追蹤

    🚀 高優先度(優先實施)

    • [ ] #[issue-number]: [標題] - 每月節省 $X
    • [ ] #[issue-number]: [標題] - 每月節省 $X

    ⚡ 中優先度

    • [ ] #[issue-number]: [標題] - 每月節省 $X
    • [ ] #[issue-number]: [標題] - 每月節省 $X

    🔄 低優先度(有餘力再做)

    • [ ] #[issue-number]: [標題] - 每月節省 $X

    📈 進度追蹤

    • 已完成:0 / Y 項最佳化
    • 已實現節省:$0 / 每月 $X
    • 實施狀態:未開始

    🎯 成功標準

    • [ ] 所有高優先度最佳化項目皆已實施
    • [ ] 實際實現 >80% 的估算節省金額
    • [ ] 觀察到無效能降級狀況
    • [ ] 成本監控儀表板已更新

    📝 備註

    • 請在 Issue 完成時同步檢視並更新此 EPIC
    • 監控實際與估算節省金額的差異
    • 考慮定期安排成本最佳化審查
    
    

錯誤處理

  • 成本驗證:若節省金額估算缺乏佐證依據,或與 Azure Pricing 定價不一致,請重新核對組態設定

<!-- truncated for translation batch; full body continues in source -->