設定 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 — 服務資料的提供者是(例如,Microsoft,Contoso)。
  • 類型 — 使用 PascalCase 的推薦類型識別碼(例如, StoppedVMs, IdleCosmosDB)。

例如: 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_RecommendationProvider、 x_RecommendationSolution、 x_RecommendationTypeId, x_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 工具和資源。

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