无人使用的项目 Recommender
无人使用的项目 Recommender 会分析组织中项目的使用活动,并提供建议,帮助您发现、收回或移除无人使用的项目。
概览
在快速发展的组织中,云资源(包括整个项目)偶尔会被遗忘,这种情况并不罕见。此类无人使用的资源可能很难识别,并且往往会导致不必要的浪费和安全风险。
无人使用的项目 Recommender 会分析组织中所有项目的使用活动,并为您提供以下功能,可帮助您发现、收回和关停无人使用的项目:
- 每个项目(网络、API、项目所有者、服务活动等)的使用情况数据分析。
- 建议停用使用活动量低的项目。
- 为使用活动量高但没有活跃所有者的项目分配新的所有者的建议。
关停或收回无人使用的项目可为您的组织带来以下影响和优势:
- 降低安全风险 (
SECURITY
) - 减少不必要的支出 (
COST
) - 减少与工作负载相关的碳足迹 (
SUSTAINABILITY
)
工作原理
无人使用的项目 Recommender 会分析过去 30 天的项目使用情况。下表列出了无人使用项目的 Recommender 可以根据使用活动量是低还是高生成的建议和数据分析。
项目使用情况/类型 | 数据分析子类型 | 建议 | 建议子类型 |
---|---|---|---|
符合以下条件的项目:
|
PROJECT_ACTIVITY |
查看或删除项目。 | CLEANUP_PROJECT |
符合以下条件的项目:
|
PROJECT_ACTIVITY |
分配新的所有者以收回项目。 | RECLAIM_PROJECT |
所有其他非 Apps 脚本项目。 | PROJECT_ACTIVITY |
- | - |
建议和数据分析在 Cloud 组织层次结构的不同级别提供。访问这些建议和数据分析需要相应级层的 IAM 角色绑定:
- 在项目级层:项目所有者可以发现其有权访问的项目的数据分析和建议并采取措施。
- 在组织级别:组织管理员可以发现云组织中项目的数据分析和建议并采取措施。
- 在结算账号级层:结算管理员可以发现与特定结算账号关联的项目的数据分析和建议并采取措施。
对项目的使用活动进行排名
根据提供的建议,可为项目提供使用活动量低或高的排名。项目的使用活动量排名是根据项目利用率数据分析中包含的内容计算得出的。
若要将项目认定为使用活动量低,需要满足以下条件:
使用量分类 | 条件 |
---|---|
项目数多于 50 个的组织 |
|
项目数少于 50 个的组织 |
|
建议优先级和影响
无人使用的项目建议包含以下字段,有助于确定优先级并估算其应用优势:
priority
- P1-P4 之间的优先级值,P1 为最高优先级。primaryImpact
-SECURITY
。无人使用的项目中的高优先级安全建议的数量。additionalImpact(s)
-COST
和SUSTAINABILITY
。移除项目后可实现的费用 ($) 和可持续发展排放量 (kgCO2e) 节省。
建议优先级
无人使用的项目建议的优先级范围为 P1 到 P4,P1 是最高优先级。
Recommender 会首先查看每个无人使用的项目中的安全建议。在这里,它会将无人使用的项目建议的优先级设置为与项目中找到的最高优先级建议相同。例如,如果无人使用的项目有 10 条安全建议(8 条 P2 建议和 2 条 P1 建议),则无人使用的项目建议的优先级值为 P1。
无人使用的项目中最常出现的安全建议来自 IAM Recommender。优先级为 P1 的无人使用的项目建议可能意味着无人使用的项目中存在可公开访问的 Cloud Storage 存储桶(详细了解 IAM Recommender 如何设置优先级)。
安全影响
primaryImpact
- SECURITY
字段提供的 securityProjection
等于无人使用的项目中的高优先级(P2 和更高)安全建议的数量。例如,当项目具有将宽泛的 Editor 角色替换为更精细的角色的建议时,该建议的优先级为 P2,并且会计入 priorityRecommendationCount
。
费用影响
additionalImpact
- COST
字段提供 costProjection
,这是无人使用的项目被移除时的估算费用节省。此值基于过去 30 天内无人使用的项目中运行的资源产生的费用。
可持续发展影响
additionalImpact
- SUSTAINABILITY
字段提供 sustainabilityProjection
,这是过去 30 天内无人使用的项目中运行的资源所产生的碳排放量估算值。估算值以二氧化碳当量千克 (kgCO2e) 为单位。
项目利用率数据分析的内容
项目的利用率数据分析的内容是字段值,用于对项目的使用活动进行排名并生成 CLEANUP_PROJECT
和/或 RECLAIM_PROJECT
建议。
下表列出了 Recommender 会在 PROJECT_ACTIVITY
数据分析中显示的各个字段:
字段 | 说明 |
---|---|
使用量级别 | |
usagePercentile |
此项目与同一组织中的其他项目相比的使用级别百分位。
如果百分位值为 -1,则表示未计算该值。如果组织的项目少于 50 个,则系统不会计算该值。 |
API 活动 | |
activeServiceAccountDailyCount |
此项目下具有身份验证活动的服务账号的每日平均值。 |
apiClientDailyCount |
此项目产生的 API 调用的唯一客户端的每日平均值。 |
consumedApiDailyCount |
此项目消耗的 API 调用次数的每日平均值。 |
datastoreApiDailyCount |
此项消耗的 Datastore API 调用次数的每日平均值 |
网络活动 | |
vpcEgressDailyBytes |
流出此项目的 VPC 出站流量字节数的每日平均值。 |
vpcIngressDailyBytes |
流入此项目的 VPC 入站流量字节数的每日平均值。 |
结算使用量 | |
hasBillingAccount |
在观察期结束时检查项目是否有结算账号 |
serviceWithBillableUsage |
过去 30 天内使用过的计费服务的名称。 |
Cloud 服务使用量 | |
activeAppengineInstanceDailyCount :system/instance_count |
此项目下活跃的 App Engine 实例的每日平均值 |
activeCloudsqlInstanceDailyCount |
此项目下活跃的 Cloud SQL 实例的每日平均值。 |
activeGceInstanceDailyCount |
此项目下活跃的 Compute Engine 实例的每日平均值。 |
bigqueryInflightJobDailyCount |
此项目下运行中的 BigQuery 作业的每日平均值。 |
bigqueryInflightQueryDailyCount |
此项目下运行中的 BigQuery 查询计数的每日平均值。 |
bigqueryStorageDailyBytes |
此项目下 BigQuery 存储空间的每日平均值。 |
bigqueryTableDailyCount |
此项目下 BigQuery 表计数的每日平均值。 |
gcsObjectDailyCount |
此项目下 Cloud Storage 对象数量的每日平均值。 |
gcsRequestDailyCount |
此项目下的 Cloud Storage API 数量的每日平均值。 |
gcsStorageDailyBytes |
此项目下 Cloud Storage 使用的存储空间字节数的每日平均值。 |
用户活动 | |
numActiveUserOwners |
在观察期结束时活跃用户类型项目所有者的数量。活跃表示在观察期内,用户账号未停用,并且在此项目下存在某个确定的活动。 |
owners |
项目所有者及其活动的列表 |
其他字段 | |
hasActiveOauthTokens |
检查在过去 180 天内项目是否使用了任何有效的 OAuth 令牌。 |
carbonFootprintDailyKgCO2 |
根据最近 30 天的可用数据,此项目产生的碳排放量的每日平均量。 |
costProjection |
要移除的项目预计在指定时间段内可节省的费用。系统会根据结算账号权限显示自定义价格或定价。它是根据过去 30 天的可用数据估算得出的,并不构成账单。 |
severity |
severity 设置为在项目中最高严重级别的安全数据分析的相应值。例如,根据 IAM Recommender 为其数据分析设置严重程度的方式,对无人使用的项目数据分析的严重级别为 CRITICAL 可能意味着无人使用的项目中存在可公开访问的 Cloud Storage 存储桶。 |
删除项目的建议
如果某个项目在过去 30 天内的使用量低并且在过去 180 天内未使用 OAuth 令牌,则建议删除该项目。
将新所有者分配给项目的建议
当项目满足下面列出的所有条件时,建议为项目分配新的所有者:
- 所有已分配的所有者在过去 90 天内在项目中不活跃,或者不再与公司相关联。
- 项目的使用量高。
价格
如需详细了解 Active Assist 价格,请参阅 Recommender 价格。
准备工作
您必须先执行以下操作,然后才能查看数据分析和建议:
- 您必须启用 Recommender API。
您只需在单个结算项目上启用该 API。然后,您可以使用此结算项目和 gcloud/API 的
--billing-project
功能查看其他项目、整个组织或结算账号的建议和数据分析。 - 确保您已分配下列必要的角色之一:
说明 | 角色 |
---|---|
查看建议 |
recommender.projectUtilViewer |
查看和更新建议 |
recommender.projectUtilAdmin |
在透明度和控制中心中选择停用数据分析和建议 |
dataprocessing.admin |
这些角色提供了一组权限,可让您访问数据分析和建议。如需详细了解角色,请参阅了解角色和授予 IAM 权限。
通过在组织级层授予这些角色,您可以使用组织级 API 分别或整体(组织中的所有无人使用的项目)访问组织中项目的建议和数据分析。
通过在结算账号级层授予这些角色,您可以访问使用指定结算账号的项目的建议和数据分析。
如需详细了解如何选择停用数据分析,请参阅选择停用数据分析和建议。
Recommender ID
以下是无人使用的项目 Recommender ID 和数据分析类型:
google.resourcemanager.projectUtilization.Recommender
google.resourcemanager.projectUtilization.Insight
必需的 IAM 权限
如需访问建议和数据分析列表,您需要具备以下权限:
recommender.resourcemanagerProjectUtilizationRecommendations.get
recommender.resourcemanagerProjectUtilizationRecommendations.list
recommender.resourcemanagerProjectUtilizationInsights.get
recommender.resourcemanagerProjectUtilizationInsights.list
如需更新建议和数据分析(例如,以忽略建议),需要具备以下权限:
recommender.resourcemanagerProjectUtilizationRecommendations.update
recommender.resourcemanagerProjectUtilizationInsights.update
查看无人使用的项目建议
本部分介绍如何使用 gcloud
检查无人使用的数据分析和建议,以及如何使用 curl
向 Recommender API 发送请求。
gcloud
如要使用 gcloud
查看建议和数据分析,请按以下步骤操作。如需了解详情,请参阅使用 API - 数据分析和使用 API - 建议。
建议
如需列出已启用 Recommender API 的项目的无人使用的项目建议,请运行以下命令:
gcloud recommender recommendations list \ --project=PROJECT_ID \ --location=global \ --recommender=google.resourcemanager.projectUtilization.Recommender
替换以下内容:
PROJECT_ID
:项目 ID。
如需在使用已启用 Recommender API 的项目(如上一步)中列出的项目中无人使用的项目建议,请运行以下命令:
gcloud recommender recommendations list \ --billing-project=BILLING_PROJECT_ID \ --project=PROJECT_ID \ --location=global \ --recommender=google.resourcemanager.projectUtilization.Recommender
替换以下内容:
BILLING_PROJECT_ID
:您使用 Recommender API 启用的项目的 ID(与上一步中指定的 PROJECT_ID 相同)。PROJECT_ID
:您要查看无人使用的项目建议的其他项目的 ID。
如需在使用已启用 Recommender API 的项目(在上一步中)的同时,列出整个组织的无人使用的项目建议,请运行以下命令:
gcloud recommender recommendations list \ --billing-project=BILLING_PROJECT_ID \ --organization=ORGANIZATION_ID \ --location=global \ --recommender=google.resourcemanager.projectUtilization.Recommender
替换以下内容:
BILLING_PROJECT_ID
:已启用 Recommender API 的项目的 ID(与上一步中指定的 PROJECT_ID 相同)。ORGANIZATION_ID
:您要查看无人使用的项目建议的组织的 ID。
如需在使用已启用 Recommender API 的项目(在上一步中)的同时,列出使用特定结算账号的无人使用的项目建议,请运行以下命令:
gcloud recommender recommendations list \ --billing-project=BILLING_PROJECT_ID \ --billing-account=BILLING_ACCOUNT_ID \ --location=global \ --recommender=google.resourcemanager.projectUtilization.Recommender
替换以下内容:
BILLING_PROJECT_ID
:已启用 Recommender API 的项目的 ID(与上一步中指定的 PROJECT_ID 相同)。BILLING_ACCOUNT_ID
:您的 Google Cloud 结算账号的 ID。
数据分析
如需列出给定项目的使用情况数据分析,请运行以下命令:
gcloud recommender insights list \ --project=PROJECT_ID \ --location=global \ --insight-type=google.resourcemanager.projectUtilization.Insight
替换以下内容:
PROJECT_ID
:项目 ID。
如需在使用启用了 Recommender API 的项目(如上一步)中列出其他项目的使用情况数据分析,请运行以下命令:
gcloud recommender insights list \ --billing-project=BILLING_PROJECT_ID \ --project=PROJECT_ID \ --location=global \ --insight-type=google.resourcemanager.projectUtilization.Insight
替换以下内容:
BILLING_PROJECT_ID
:已启用 Recommender API 的项目的 ID(与上一步中指定的 PROJECT_ID 相同)。PROJECT_ID
:您要查看无人使用的 Recommender 数据分析的其他项目的 ID。
如需在使用已启用 Recommender API 的项目(在上一步中)的同时,列出整个组织的使用情况数据分析,请运行以下命令:
gcloud recommender insights list \ --billing-project=BILLING_PROJECT_ID \ --organization=ORGANIZATION_ID \ --location=global \ --insight-type=google.resourcemanager.projectUtilization.Insight
替换以下内容:
BILLING_PROJECT_ID
:已启用 Recommender API 的项目的 ID(与上一步中指定的 PROJECT_ID 相同)。ORGANIZATION_ID
:您要查看其使用情况数据分析的组织的 ID。
如需在使用已启用 Recommender API 的项目(在上一步中)的同时,列出使用特定结算账号的使用情况数据分析,请运行以下命令:
gcloud recommender insights list \ --billing-project=BILLING_PROJECT_ID \ --billing-account=BILLING_ACCOUNT_ID \ --location=global \ --insight-type=google.resourcemanager.projectUtilization.Insight
替换以下内容:
BILLING_PROJECT_ID
:已启用 Recommender API 的项目的 ID(与上一步中指定的 PROJECT_ID 相同)。BILLING_ACCOUNT_ID
:您的 Google Cloud 结算账号的 ID。
API
如需查看建议和数据分析,您可以使用 curl
向 Recommender API 发送请求。如需通过命令行对请求进行授权,您可以使用 OAuth 访问令牌。OAuth 访问令牌是一个字符串,用于授予对 API 的临时访问权限。
建议
如需列出已启用 Recommender API 的项目的无人使用的项目建议,请运行以下命令:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/\ recommenders/google.resourcemanager.projectUtilization.Recommender/recommendations"
替换以下内容:
- PROJECT_ID:项目 ID。
如需在使用已启用 Recommender API 的项目(如上一步)中列出的项目中无人使用的项目建议,请运行以下命令:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: BILLING_PROJECT_ID" \ "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/\ recommenders/google.resourcemanager.projectUtilization.Recommender/recommendations"
替换以下内容:
BILLING_PROJECT_ID
:您使用 Recommender API 启用的项目的 ID(与上一步中指定的 PROJECT_ID 相同)。PROJECT_ID
:您要查看无人使用的项目建议的其他项目的 ID。
如需在使用已启用 Recommender API 的项目(在上一步中)的同时,列出整个组织的无人使用的项目建议,请运行以下命令:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: BILLING_PROJECT_ID" \ "https://recommender.googleapis.com/v1/organizations/ORGANIZATION_ID/locations/global/\ recommenders/google.resourcemanager.projectUtilization.Recommender/recommendations"
替换以下内容:
BILLING_PROJECT_ID
:已启用 Recommender API 的项目的 ID(与上一步中指定的 PROJECT_ID 相同)。ORGANIZATION_ID
:您要查看无人使用的项目建议的组织的 ID。
如需在使用已启用 Recommender API 的项目(在上一步中)的同时,列出使用特定结算账号的无人使用的项目建议,请运行以下命令:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: BILLING_PROJECT_ID" \ "https://recommender.googleapis.com/v1/billingAccounts/BILLING_ACCOUNT_ID/locations/global/\ recommenders/google.resourcemanager.projectUtilization.Recommender/recommendations"
替换以下内容:
BILLING_PROJECT_ID
:已启用 Recommender API 的项目的 ID(与上一步中指定的 PROJECT_ID 相同)。BILLING_ACCOUNT_ID
:您的 Google Cloud 结算账号的 ID。
数据分析
如需列出给定项目的使用情况数据分析,请运行以下命令:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global\ /insightTypes/google.resourcemanager.projectUtilization.Insight/insights"
替换以下内容:
- PROJECT_ID:项目 ID。
如需在使用启用了 Recommender API 的项目(如上一步)中列出其他项目的使用情况数据分析,请运行以下命令:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: BILLING_PROJECT_ID/" \ "https://recommender.googleapis.com/v1/projects/PROJECT_ID//locations/global\ /insightTypes/google.resourcemanager.projectUtilization.Insight/insights"
替换以下内容:
BILLING_PROJECT_ID
:已启用 Recommender API 的项目的 ID(与上一步中指定的 PROJECT_ID 相同)。PROJECT_ID
:您要查看无人使用的 Recommender 数据分析的其他项目的 ID。
如需在使用已启用 Recommender API 的项目(在上一步中)的同时,列出整个组织的使用情况数据分析,请运行以下命令:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID/" \ "https://recommender.googleapis.com/v1/organizations/ORGANIZATION_ID/locations/global/\ insightTypes/google.resourcemanager.projectUtilization.Insight/insights"
替换以下内容:
BILLING_PROJECT_ID
:已启用 Recommender API 的项目的 ID(与上一步中指定的 PROJECT_ID 相同)。ORGANIZATION_ID
:您要查看无人使用的项目建议的组织的 ID。
如需在使用已启用 Recommender API 的项目(在上一步中)的同时,列出使用特定结算账号的使用情况数据分析,请运行以下命令:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID/" \ "https://recommender.googleapis.com/v1/billingAccounts/BILLING_ACCOUNT_ID/locations/global/\ insightTypes/google.resourcemanager.projectUtilization.Insight/insights"
替换以下内容:
BILLING_PROJECT_ID
:已启用 Recommender API 的项目的 ID(与上一步中指定的 PROJECT_ID 相同)。BILLING_ACCOUNT_ID
:您的 Google Cloud 结算账号的 ID。
配置建议参数
本部分介绍如何使用 gcloud
和 curl
查看并配置此 Recommender。
下表列出了可以配置的各种参数:
参数 | 说明 | 预期值 |
---|---|---|
minimum_observation_period |
最短观察期定义了在生成建议之前待分析的项目活动存在的天数。 目前仅支持在组织级层设置此值。 |
“P30D”[默认]“P60D”“P90D”“P180D”“P270D”“P365D” |
gcloud
如需使用 gcloud
查看和更新 Recommender 配置,请按照以下步骤操作。
查看配置
如需查看给定组织内无人使用的项目的 Recommender 配置,请从启用了 Recommender API 的组织所包含的项目中运行以下命令:
gcloud beta recommender recommender-config describe \ google.resourcemanager.projectUtilization.Recommender \ --organization=ORGANIZATION_ID \ --location=global
替换以下内容:
ORGANIZATION_ID
:组织 ID。
输出示例:
etag: ETAG name: organizations/ORGANIZATION_ID/locations/global/recommenders/google.resourcemanager.projectUtilization.Recommender/config recommenderGenerationConfig: params: minimum_observation_period: P30D revisionId: DEFAULT updateTime: '2022-04-19T00:57:55Z'
请记下 ETAG 值:
ETAG
:此值将在recommender-config update
中使用。
更新配置
如需更新给定组织内无人使用的项目的 Recommender 配置,请选择启用了 Recommender API 的组织所包含的项目,然后创建一个
config.gcloud
文件:{ "params": { "minimum_observation_period": DURATION } }
替换以下内容:
DURATION
:“P30D”“P60D”“P90D”“P180D”“P270D”“P365D”中的一个值
运行以下命令:
gcloud beta recommender recommender-config update \ google.resourcemanager.projectUtilization.Recommender \ --organization=ORGANIZATION_ID \ --location=global \ --config-file=config.gcloud \ --etag=ETAG
替换以下内容:
ORGANIZATION_ID
:组织 ID。ETAG
:从recommender-config describe
返回的 etag 值。
API
如需查看和更新 Recommender 配置,您可以使用 curl
向 Recommender API 发送请求。如需通过命令行对请求进行授权,您可以使用 OAuth 访问令牌。OAuth 访问令牌是一个字符串,用于授予对 API 的临时访问权限。
查看配置
如需查看给定组织内无人使用的项目的 Recommender 配置,请从启用了 Recommender API 的组织所包含的项目中运行以下命令:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ https://recommender.googleapis.com/v1beta1/organizations/ORGANIZATION_ID/locations/global/recommenders/google.resourcemanager.projectUtilization.Recommender/config
替换以下内容:
PROJECT_ID
:项目 ID。ORGANIZATION_ID
:组织 ID。
输出示例:
{ "name": "organizations/ORGANIZATION_ID/locations/global/recommenders/google.resourcemanager.projectUtilization.Recommender/config", "recommenderGenerationConfig": { "params": { "minimum_observation_period": "P60D" } }, "etag": ETAG, "updateTime": "2022-04-21T18:51:17.407255Z", "revisionId": "75c3b0d7" }
请记下 ETAG 值:
ETAG
:此值将在curl PATCH
中使用。
更新配置
如需更新给定组织内无人使用的项目的 Recommender 配置,请选择启用了 Recommender API 的组织所包含的项目,然后创建一个
request.json
文件:{ "name": "organizations/ORGANIZATION_ID/locations/global/recommenders/google.resourcemanager.projectUtilization.Recommender/config", "recommenderGenerationConfig": { "params": { "minimum_observation_period": DURATION } }, "etag": ETAG, }
替换以下内容:
DURATION
:“P30D”“P60D”“P90D”“P180D”“P270D”“P365D”中的一个值ETAG
:从CURL get
返回的 etag 值。
运行以下命令行:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json; charset=utf-8" -d @request.json \ https://recommender.googleapis.com/v1beta1/organizations/ORGANIZATION_ID/locations/global/recommenders/google.resourcemanager.projectUtilization.Recommender/config
替换以下内容:
PROJECT_ID
:项目 ID。ORGANIZATION_ID
:组织 ID。