設定 FinOps 中樞建議

FinOps 樞紐會從多個來源收集建議,並將其與成本管理匯出的預留建議一同匯入 Recommendations 管理資料集 。 建議來自 Azure Resource Graph,使用可配置的查詢集,拉取 Azure Advisor 推薦,並根據資源配置識別各種優化情境。 查詢會以簡單的 JSON 檔案形式在儲存體中管理,讓你只要將查詢檔案上傳到 hub 儲存體,即可輕鬆新增你自己的自訂推薦。


先決條件

開始前,請確保您已經具備以下條件:

  • 部署了一個 FinOps 中樞實例
  • 讀者角色指派給 Data Factory 的受控識別,範圍為您想要查詢的管理群組或訂閱。 此權限必須與 FinOps 中樞部署分開設定。

如何處理推薦內容

推薦管線每日執行,並處理儲存在 Hub 儲存體中的 config/queries 資料夾內的查詢檔案:

  1. queries_DailySchedule觸發器一天運行一次。
  2. queries_ExecuteETL 管線會遍歷 config/queries storage 資料夾中的所有查詢檔案。
  3. queries_ETL_ingestion 管線會對 Azure Resource Graph 執行每個查詢、將結果去除重複,並將資料以 parquet 格式儲存在 ingestion/Recommendations 資料夾中。
  4. 若使用 Azure Data Explorer,資料會被匯入 Recommendations_raw 表格,並使用 Recommendations_transform_v1_2() 函式進行轉換。

Hub 的推薦與來自成本管理匯出的預留建議合併在同一 Recommendations 管理資料集中。 你可以用欄位 x_SourceType 來區分來源。


內建推薦

FinOps 中心包含以下建議。 大多數都是預設啟用的。 可選的建議在不適用的組織中可能會產生噪音,並可透過指定的範本參數在部署時啟用。

Compute

資料庫

管理及治理

網路

儲存體

網路

要停用特定的預設建議,請從 hub 儲存的 config/queries 資料夾刪除該查詢檔案。 管線只會處理已存在的查詢檔案。


新增自訂推薦

你可以透過將查詢檔案上傳到 hub 儲存的 config/queries 資料夾來新增自訂推薦。 管線會在下次每日執行時自動偵測新的查詢檔案。

檔案命名慣例

使用以下 {dataset}-{provider}-{type}.json 格式命名查詢檔案:

  • 資料集 — 目標資料集(例如, Recommendations)。
  • Provider — 服務資料的提供者是(例如,MicrosoftContoso)。
  • 類型 — 使用 PascalCase 的推薦類型識別碼(例如, StoppedVMsIdleCosmosDB)。

例如: Recommendations-Contoso-IdleCosmosDB.json

查詢檔案格式

每個查詢檔案為具有以下屬性的 JSON 檔案:

{
  "dataset": "Recommendations",
  "provider": "Microsoft",
  "query": "<Azure Resource Graph query>",
  "queryEngine": "ResourceGraph",
  "scope": "Tenant",
  "source": "<descriptive source name>",
  "type": "<unique type identifier>",
  "version": "1.0"
}
房產 Description
dataset 必須是 "Recommendations"
provider 提供者名稱(例如"Microsoft")。
query 要執行的 Azure Resource Graph 查詢,需以單行形式撰寫。
queryEngine 必須是 "ResourceGraph"
scope 查詢範圍。 使用 "Tenant" 來查詢該租戶內 Data Factory 受控識別可存取的所有訂用帳戶。 不支援跨租戶查詢,但透過 Azure Lighthouse 委派的資源會包含在租戶範圍查詢中。
source 推薦來源的描述性名稱(例如"Azure Advisor""FinOps hubs")。
type 此推薦類型的程式識別碼。 使用 {provider}-{name} 僅包含字母數字和連字號的格式(例如, "Contoso-IdleCosmosDB")。 此值作為輸出檔名的一部分使用。
version 結構描述版本。 請使用 "1.0"

必備輸出欄位

您的查詢必須返回以下欄位:

Column Description
ResourceId 資源識別碼(小寫)。
ResourceName 資源名稱(小寫)。
SubAccountId 訂用帳戶標識碼。
SubAccountName 訂用帳戶名稱。 與 resourcecontainers 結合以填入此內容。
x_RecommendationCategory 推薦類別。 使用 "Cost""HighAvailability""OperationalExcellence""Performance""Security"
x_RecommendationDate 推薦日期(查詢特定時間點時,請使用 now())。
x_RecommendationDescription 簡要說明問題。
x_RecommendationDetails 帶有額外屬性的 JSON 字串。 包含 x_RecommendationProviderx_RecommendationSolutionx_RecommendationTypeIdx_ResourceType 以及任何與建議相關的自訂屬性。
x_RecommendationId 建議的唯一識別碼(例如資源識別碼 + 後綴)。
x_ResourceGroupName 資源群組名稱(小寫)。

撰寫查詢的技巧

  • 要填寫訂閱名稱,請在查詢末尾加入 resourcecontainers

    | join kind=leftouter (
        resourcecontainers
        | where type == 'microsoft.resources/subscriptions'
        | project SubAccountName=name, SubAccountId=subscriptionId
    ) on SubAccountId
    | project-away SubAccountId1
    
  • 透過將資源 ID 與描述性後綴(例如,x_RecommendationId)結合來生成 strcat(tolower(id), '-idle')

  • 使用 tostring(bag_pack(...)) 建構 x_RecommendationDetails 以產生 JSON 字串。 必須以 tostring() 包裝,因為資料管線無法將動態物件序列化為 Parquet 格式;該值必須是字串。 你也可以使用 strcat() 手動建立 JSON 字串,但建議使用 bag_pack(),因為它會自動處理跳脫。

  • 包含 x_RecommendationTypeId,將其作為穩定的 GUID,以便在不同執行次數之間唯一識別建議類型。

例如,請檢視 FinOps 工具包原始碼 內建的查詢檔案。


提供意見反應

請寫下您的快速評價,讓我們知道我們的表現如何。 我們會使用這些評論來改善及擴充 FinOps 工具和資源。

如果您要尋找特定專案,請投票給現有專案或建立新想法。 與其他人分享想法,以獲得更多的選票。 我們專注於擁有最多選票的想法。