{"meta":{"title":"大规模控制和跟踪成本","intro":"通过将公司的财务结构映射到成本中心并大规模设置预算，控制成本并为企业提供精细报告。","product":"计费与付款","breadcrumbs":[{"href":"/zh/billing","title":"计费与付款"},{"href":"/zh/billing/tutorials","title":"教程"},{"href":"/zh/billing/tutorials/control-costs-at-scale","title":"在大规模情况下控制成本"}],"documentType":"article"},"body":"# 大规模控制和跟踪成本\n\n通过将公司的财务结构映射到成本中心并大规模设置预算，控制成本并为企业提供精细报告。\n\n成本中心通过将成本映射到公司的财务结构来帮助你跟踪和控制 GitHub 成本。\n\n本教程指导你使用用户界面和 REST API 规划、创建和管理成本中心，帮助你确定哪种方法最适合组织的需求。\n\n## 1.规划成本中心策略\n\n成本中心允许你对资源（用户、组织和存储库）进行分组 GitHub ，以便进行单独的成本跟踪和报告。 每个成本中心都应代表公司中您希望单独报告或单独控制成本的一个细分部分。\n\n如果使用Azure计费，可以将不同的计费标识分配给每个成本中心。\n\n### 确定所需的成本中心\n\n最佳策略取决于财务报告结构和 GitHub 设置的复杂性。 从最简单的方法开始，以后始终可以添加更多成本中心。\n\n按照以下步骤规划成本中心：\n\n1. ```\n          **映射到财务实体**：为要内部跟踪的每个财务实体创建一个成本中心（例如部门、业务部门或项目团队）。\n   ```\n\n2. ```\n          **标识用户**：列出属于每个财务实体的用户。 将用户直接分配到成本中心可确保正确分配其许可证和产品使用情况。\n   ```\n\n3. ```\n          **标识组织**：列出属于每个财务实体的组织。 将组织分配到成本中心可正确分配其操作、Codespaces 包和其他产品的使用情况。\n   ```\n\n4. ```\n          **确定混合所有权**：如果组织包含不同财务实体拥有的存储库，请计划将单个存储库分配给相关成本中心，并使组织保持未分配状态。\n   ```\n\n> \\[!TIP]\n> 如果用户被直接分配到成本中心 A，并通过组织成员身份间接成为成本中心 B 的成员，则其许可产品的所有成本都分配给成本中心 A。有关更多详细信息和示例，请参阅 [不同产品的成本中心分配](/zh/billing/reference/cost-center-allocation)。\n\n## 2. 在 UI 中创建成本中心\n\n现在，你将使用用户界面（UI）创建第一个成本中心，以熟悉成本中心的工作原理。 选择已确定为示例的成本中心之一，最好从小型财务实体开始。\n\n1. 导航到您的企业。 例如，从 GitHub.com 上的 [公司](https://github.com/settings/enterprises?ref_product=ghec\\&ref_type=engagement\\&ref_style=text) 页面。\n2. 在页面顶部，单击“<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-credit-card\" aria-label=\"credit-card\" role=\"img\"><path d=\"M10.75 9a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z\"></path><path d=\"M0 3.75C0 2.784.784 2 1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14H1.75A1.75 1.75 0 0 1 0 12.25ZM14.5 6.5h-13v5.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Zm0-2.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25V5h13Z\"></path></svg> Billing and licensing”。\n3. 单击“成本中心”\\*\\*\\*\\*。\n4. 在右上角单击“新建成本中心”\\*\\*\\*\\*。\n5. 在“名称”下的文本框中，输入要跟踪其成本的财务实体的名称。\n6. （可选）如果此财务实体具有单独的Azure订阅，则可以将Azure订阅添加到成本中心，以便直接向其收取使用费。 凭据将针对Azure进行验证，以确保与帐户关联的Azure ID 可用。\n7. 在 **“资源**”下，选择要作为此成本中心的一部分跟踪的用户、组织和存储库。\n8. 单击“创建成本中心”\\*\\*\\*\\*。\n\n新的成本中心现在处于活动状态，使用情况将立即开始归因于成本中心。 未来的计费报告将包括此成本中心，并在 `cost_center_name` 列中列出分配给它的使用情况。 还可以按此成本中心筛选使用情况图表。\n\n## 3. 设置预算以控制成本\n\n创建成本中心可以单独跟踪不同财务实体的成本。 若要实际控制成本，需要将预算应用于成本中心。\n\n### 了解预算\n\n预算可让你控制支出。 每个预算：\n\n* 适用于单个组织、存储库、成本中心或整个企业\n* 控制一个付费产品、SKU 或 SKU 组的每月使用情况\n* 可配置为停止使用，或仅在达到预算限制时发出警报\n* 可以通知帐户所有者、计费经理和已提名用户，因为接近预算限制\n\n### 计算成本中心预算\n\n如果你的内部财务计划为该成本中心的 GitHub 拨付了单一每月预算，则需要将其分配给该团队使用的各项产品。\n\n1. ```\n          **计算固定许可证成本**：将团队已使用的GitHub Enterprise、GitHub Copilot、GitHub Secret Protection and GitHub Code Security许可证成本加起来。\n   ```\n2. ```\n          **计算可变预算**：从内部预算中减去许可证成本。 剩余金额是您可以用于超出计划包含范围的按使用量计费产品的部分。\n   ```\n\n### 为成本中心创建预算\n\n为每个要控制成本的产品、SKU 或 SKU 组创建一个预算。\n\n1. 在“计费和许可”选项卡上，单击“ <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-bell\" aria-label=\"bell\" role=\"img\"><path d=\"M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z\"></path></svg>**预算”和警报** 以显示现有预算。\n\n2. 单击 **“新建预算** ”打开“新建每月预算”页。\n\n3. 在“预算类型”下，选择 **产品级预算**、 **SKU 级预算**或 **捆绑高级请求预算**。\n\n   * 若要限制产品级别的支出，请在“产品级预算”中从下拉列表中选择产品（例如）。 Codespaces\n   * 若要限制在 SKU 级别的支出，请在“SKU 级别预算”中选择一个产品和一个 SKU（例如，Copilot 和 Copilot 高级请求）。\n   * 若要限制所有高级请求的支出，请使用“捆绑的高级请求预算”。\n\n4. 单击“ **下一步：配置预算** ”以显示“预算范围”，并将此预算的支出范围设置为之前创建的成本中心。\n\n5. 在“预算”下，设置预算金额。 若要在达到预算限制后停止任何使用情况和进一步支出，请在 **达到预算限制时选择“停止使用**”。 这不适用于基于许可的产品。\n\n6. 若要在使用情况达到 75%、90%和预算目标的 100% 时收到警报，请选择“警报”下的 **“接收预算阈值警报** ”。  帐户所有者、计费经理和任何其他指定收件人都将通过电子邮件收到通知。 可以随时选择退出。\n\n   在“警报收件人”下，选择要接收警报的任何其他收件人。\n\n7. 单击“创建预算”\\*\\*\\*\\*。\n\n### 审查现有预算是否存在冲突\n\n创建成本中心预算后，请检查现有的企业范围预算，以确保它们不会与新的成本中心预算冲突或替代新的成本中心预算。\n\n导航到“预算和警报”页。 你将看到两个预算列表：\n\n* **企业预算**：适用于整个企业帐户的限制\n* **其他预算**：特定存储库、组织或成本中心的限制\n\n#### 检查企业预算\n\n查看任何企业预算是否适用于与新的成本中心预算相同的产品或 SKU。 如果企业预算非常低，则可能会在达到成本中心自己的预算之前阻止对成本中心的使用。 请考虑删除或调整冲突的企业预算。\n\n#### 查看成本中心预算\n\n筛选其他预算列表以显示 **成本中心**的范围。 你应该能看到新的成本中心，其中包含所创建的每个预算的一行。 最初，使用量接近零，但在几天之内，当用户和存储库消耗超出其计划额度的产品时，成本将开始累积。\n\n## 4.使用 REST API 创建成本中心\n\n了解如何在用户界面中创建成本中心后，可以浏览 REST API，了解如何以编程方式创建成本中心。 了解 API 有助于评估自动化是否有利于组织。\n\n本部分演示了使用 GitHub CLI成本中心管理的关键 REST API 终结点。 有关安装 GitHub CLI 并进行身份验证以访问这些终结点的详细信息，请参阅 [GitHub REST API 快速入门](/zh/rest/quickstart?apiVersion=2022-11-28\\&tool=cli)。\n\n> \\[!NOTE]\n> 以下示例使用 GitHub CLI，但你可以调整这些命令以使用 `curl` 或支持 REST API 调用的任何 HTTP 客户端。\n\n### 列出所有现有成本中心\n\n首先，检索企业中的所有成本中心以查看已存在的内容。 通过这个简单的请求，你可以确保通过正确的身份验证，从而管理企业的计费。\n\n在终端中，运行以下命令，将 `ENTERPRISE` 替换为企业的数据域。\n\n```shell copy\ngh api \\\n  -H \"Accept: application/vnd.github+json\" \\\n  -H \"X-GitHub-Api-Version: 2022-11-28\" \\\n  /enterprises/ENTERPRISE/settings/billing/cost-centers\n```\n\n响应将包括在企业中创建的所有成本中心，包括本教程前面创建的成本中心。 在本例中，企业有一个成本中心“Octocenter”，其中分配了一个组织和两个用户。\n\n```json\n{\n  \"costCenters\": [\n    {\n      \"id\": \"33635e2c-edc0-40b8-abea-261839ff73c1\",\n      \"name\": \"Octocenter\",\n      \"state\": \"active\",\n      \"resources\": [\n        {\n          \"type\": \"User\",\n          \"name\": \"monalisa\"\n        },\n        {\n          \"type\": \"Org\",\n          \"name\": \"doctocat-org\"\n        },\n        {\n          \"type\": \"User\",\n          \"name\": \"doctocat\"\n        }\n      ]\n    }\n  ]\n}\n```\n\n### 创建新的成本中心\n\n通过提供名称创建新的成本中心。 你将收到用于管理此成本中心的唯一标识符。\n\n在终端中运行以下命令，替换 `ENTERPRISE` 并 `NAME` 替换为相应的值。\n\n```shell copy\ngh api \\\n  --method POST \\\n  -H \"Accept: application/vnd.github+json\" \\\n  -H \"X-GitHub-Api-Version: 2022-11-28\" \\\n  /enterprises/ENTERPRISE/settings/billing/cost-centers \\\n   -f 'name=NAME'\n```\n\n响应包括新成本中心的标识符。 将需要对该成本中心的所有未来操作使用此 `id`。\n\n```json\n{\n  \"id\": \"3312fdf2-5950-4f64-913d-e734124059c9\",\n  \"name\": \"NAME\",\n  \"state\": \"active\",\n  \"resources\": []\n}\n```\n\n### 将资源添加到成本中心\n\n将用户、组织和存储库分配到成本中心。 此示例演示如何添加多个用户和组织。\n\n在终端中运行以下命令，将`COST_CENTER_ID`替换为上一步中的标识符，并用适当的值替换`ENTERPRISE`、`NAME`和`ORG`。\n\n```shell copy\ngh api \\\n  --method POST \\\n  -H \"Accept: application/vnd.github+json\" \\\n  -H \"X-GitHub-Api-Version: 2022-11-28\" \\\n  /enterprises/ENTERPRISE/settings/billing/cost-centers/COST_CENTER_ID/resource \\\n  --input - <<< '{\n  \"users\": [\n    \"NAME-1\",\n    \"NAME-2\"\n  ],\n  \"organizations\": [\n    \"ORG-1\"\n  ]\n}'\n```\n\n响应确认资源添加成功。 如果以前向其他成本中心分配了任何资源，则会在 `reassigned_resources` 数组中列出这些资源。\n\n```json\n{\n  \"message\": \"Resources successfully added to the cost center.\",\n  \"reassigned_resources\": [\n    {\n      \"resource_type\": \"User\",\n      \"name\": \"monalisa\",\n      \"previous_cost_center\": \"Octocenter\"\n    }\n  ]\n}\n```\n\n如果终结点响应 `Problems parsing JSON`，请使用 JSON 验证程序检查选项中指定的 `--input` 数据是否有效。\n\n## 5.使用 REST API 设置预算\n\n可以编程方式创建预算，以将支出控制应用于已创建的成本中心。 这对于管理基于使用情况的成本（如大规模的高级请求）特别有用。\n\n### 为高级请求创建预算\n\n此示例演示如何为 Copilot 高级请求创建 SKU 级预算并将其应用到新的成本中心。 这使你可以为此成本中心中的资源专门为高级请求使用情况设置支出限制。\n\n在终端中运行以下命令，将`ENTERPRISE`、`COST_CENTER_ID`、`USERNAME`和`1000.0`替换为适当的值。\n\n```shell copy\ngh api \\\n  --method POST \\\n  -H \"Accept: application/vnd.github+json\" \\\n  -H \"X-GitHub-Api-Version: 2022-11-28\" \\\n  /enterprises/ENTERPRISE/settings/billing/budgets \\\n  -f budget_type='SkuPricing' \\\n  -f budget_product_sku='copilot_premium_request' \\\n  -f budget_scope='cost_center' \\\n  -f budget_entity_name='COST_CENTER_ID' \\\n  -F budget_amount=1000.0 \\\n  -F prevent_further_usage=true \\\n  -f budget_alerting='{\"will_alert\":true,\"alert_recipients\":[\"USERNAME\"]}'\n```\n\n响应确认预算已创建并返回其配置。 请注意，此预算将 `prevent_further_usage` 和 `will_alert` 都设置为 `true`。 电子邮件地址 `octocat@github.com` 将在接近预算限制时收到警报，并且一旦达到 1000 美元，成本中心资源的使用将被停止。\n\n```json\n{\n  \"id\": \"budget-uuid-here\",\n  \"budget_type\": \"SkuPricing\",\n  \"budget_product_sku\": \"copilot_premium_request\",\n  \"budget_scope\": \"cost_center\",\n  \"budget_entity_name\": \"3312fdf2-5950-4f64-913d-e734124059c9\",\n  \"budget_amount\": 1000.0,\n  \"prevent_further_usage\": true,\n  \"budget_alerting\": {\n    \"will_alert\": true,\n    \"alert_recipients\": [\n      \"octocat\"\n    ]\n  }\n}\n```\n\n> \\[!TIP]\n> 可以为同一成本中心创建多个预算，以独立控制不同的产品或 SKU。 例如，可以为 Copilot 高级请求、GitHub Actions 计算和 Codespaces 使用情况设置单独的预算。 请参阅“[GitHub 产品及库存单位名称](/zh/billing/reference/product-and-sku-names)”。\n\n## 6. 决定是否自动执行\n\n本教程演示了创建成本中心的两种方法：使用用户界面进行动手管理，使用 REST API 进行编程管理。 了解这两种方法可帮助你确定适合你的组织。\n\n在以下情况下，**用户界面** 是理想的：\n\n* 建立前几个成本中心\n\n* 偶尔更新现有成本中心\n\n* 更倾向于通过视觉方式确认更改\n\n* 有少数成本中心需要管理\n\n  ```\n          **REST API** 在以下情况下非常有用：\n  ```\n\n* 需要定期创建或更新多个成本中心\n\n* 需要将成本中心管理与现有财务系统集成，或者从外部数据源生成配置\n\n* 需要成本中心来反映组织结构（如团队成员身份或部门结构）\n\n* 需要在用户更改角色或在团队之间移动时自动维护成本中心分配\n\n### 自动化选项\n\n如果确定自动化将有利于组织，本教程中的 REST API 示例为生成自定义脚本提供了基础。 有关其他终结点的详细信息，请参阅 [REST API 的计费终结点](/zh/rest/enterprise-admin/billing?apiVersion=2022-11-28)。\n\n如果您希望基于团队成员身份实现成本中心的自动化，或者创建一个用于控制高级请求成本的双层模型，[GitHub 成本中心自动化](https://github.com/github/cost-center-automation?ref_product=copilot\\&ref_type=engagement\\&ref_style=text) 提供了一个完整的实现，利用可根据您需要调整的操作工作流。\n\n## 后续步骤\n\n若要了解可用于自动报告使用情况和成本的终结点，请参阅 [使用 REST API 自动报告使用情况](/zh/billing/tutorials/automate-usage-reporting)。\n\n如果有任何付费产品要阻止所有访问权限，则可以使用企业策略禁用该功能。 请参阅“[企业策略](/zh/enterprise-cloud@latest/admin/enforcing-policies/enforcing-policies-for-your-enterprise/about-enterprise-policies)”。"}