FinOps 中心从多个源收集建议,并将其引入 建议托管数据集 ,以及成本管理导出中的预留建议。 建议源自Azure Resource Graph使用一组可配置的查询来拉取Azure 顾问建议,并根据资源配置确定各种优化方案。 查询在存储中的简单 JSON 文件中进行管理,通过将查询文件上传到中心存储,可以轻松添加自己的自定义建议。
先决条件
在开始之前,您需要具备以下条件:
- 部署了 FinOps 中心实例。
- 在要查询的管理组或订阅上,将 读取者 角色分配给 Data Factory 托管标识。 必须独立于 FinOps 中心部署配置此权限。
如何处理建议
建议管道每天运行,并处理存储在中心存储中的 配置/查询 文件夹中的查询文件:
- queries_DailySchedule触发器每天运行一次。
- queries_ExecuteETL管道循环访问配置/查询存储文件夹中的所有查询文件。
- queries_ETL_ingestion 管道在 Azure Resource Graph 上执行每个查询,对结果进行去重,并将数据保存为 parquet 格式,存放在 ingestion/Recommendations 文件夹中。
- 如果使用 Azure 数据资源管理器,则数据将引入到
Recommendations_raw表中,并使用Recommendations_transform_v1_2()函数进行转换。
中心建议与来自成本管理导出的预留建议合并在同一个建议托管数据集中。 您可以使用 x_SourceType 列来区分不同来源。
内置建议
FinOps 中心提供以下建议。 默认情况下,大多数都已启用。 对于不适用这些建议的组织,可选建议可能会造成干扰,并且可以在部署期间通过指定的模板参数启用。
计算
-
虚拟机
- 解除分配已停止的 VM。
- 迁移到托管磁盘。
- 可选:为Windows VM 使用Azure 混合权益。 通过
enableAHBRecommendations选项启用。
-
SQL 虚拟机
- 可选:为 SQL VM 使用Azure 混合权益。 通过
enableAHBRecommendations选项启用。
- 可选:为 SQL VM 使用Azure 混合权益。 通过
-
Azure Kubernetes 服务
- 可选: 对 AKS 群集使用现成 VM。 通过
enableSpotRecommendations选项启用。
- 可选: 对 AKS 群集使用现成 VM。 通过
数据库
- Azure SQL 数据库
管理和治理
- Azure 顾问
网络
- 应用程序网关
- DDoS 保护
- ExpressRoute
- 负载均衡器
- NAT 网关
- 网络接口
- 网络安全组
- 公共 IP 地址
- VPN 网关
存储
Web
- 应用程序服务
若要禁用特定的默认建议,请从中心存储中的 配置/查询 文件夹中删除其查询文件。 管道仅处理存在的查询文件。
添加自定义建议
可以通过将查询文件上传到中心存储中的 配置/查询 文件夹来添加自定义建议。 该流水线会在下一次每日运行时自动获取新的查询文件。
文件命名约定
使用 {dataset}-{provider}-{type}.json 格式命名查询文件:
-
数据集 - 目标数据集(例如
Recommendations)。 -
Provider — 服务数据的提供方(例如,
Microsoft、Contoso)。 -
类型 - 使用 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"
}
| 财产 | 说明 |
|---|---|
dataset |
必须是 "Recommendations"。 |
provider |
提供程序名称(例如,"Microsoft")。 |
query |
要执行的 Azure Resource Graph 单行查询语句。 |
queryEngine |
必须是 "ResourceGraph"。 |
scope |
查询范围。 使用 "Tenant" 查询在该租户中 Data Factory 托管标识有权访问的所有订阅。 不支持跨租户查询,但通过Azure Lighthouse委托的资源包含在租户范围查询中。 |
source |
建议源的描述性名称(例如,"Azure 顾问" 或 "FinOps hubs")。 |
type |
此建议类型的程序化标识符。 请使用{provider}-{name}格式,且仅包含字母数字字符和连字符(例如:"Contoso-IdleCosmosDB")。 此值用作输出文件名的一部分。 |
version |
架构版本。 使用 "1.0"。 |
必需的输出列
查询必须返回以下列:
| 列 | 说明 |
|---|---|
ResourceId |
资源 ID(小写)。 |
ResourceName |
资源名称(小写)。 |
SubAccountId |
订阅 ID。 |
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 |
建议的唯一标识符(例如资源 ID + 后缀)。 |
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 工具和资源。
如果您在寻找特定的东西,可以为现有想法投票或者创建新想法。 与他人分享想法,以获得更多的选票。 我们专注于拥有最多选票的想法。