将 Microsoft Azure 数据集成到成本管理中

Cost Management Service 1-latest

了解如何添加和配置 Microsoft Azure 集成

Red Hat Customer Content Services

摘要

了解如何将 Microsoft Azure 集成添加到成本管理。成本管理是 Red Hat Insights 服务产品组合的一部分。高级分析工具的 Red Hat Insights 套件可帮助您识别和优先影响您的操作、安全性和业务。

第 1 章 将 Microsoft Azure 数据集成到成本管理中

配置 Microsoft Azure 帐户,以允许成本管理访问。

将您的 Microsoft Azure 帐户配置为成本管理集成需要:

  1. 创建存储帐户和资源组
  2. 为您的成本导出选择适当的范围
  3. 配置存储帐户 Contributor 和 Reader 角色来访问
  4. 调度每日成本导出
注意

因为非红帽产品和文档可以在不通知的情况下改变,因此配置本指南中提供的第三方集成的说明一般是常规的,并在发布时正确。有关最新信息,请参阅 Microsoft Azure 文档

Integrations 页面将 Microsoft Azure 集成添加到成本管理。

1.1. 创建 Microsoft Azure 资源组和存储帐户

成本导出数据被写入一个存储帐户,该帐户存在于资源组中。成本管理必须能够访问资源组,才能读取 Microsoft Azure 成本数据。

在 Microsoft Azure 中创建新存储帐户,使其包含成本管理的成本数据和指标。这需要一个资源组;红帽建议为此存储帐户创建专用资源组。

注意

在向成本管理添加集成前,您必须有一个具有集成管理员权利的红帽帐户用户。

  1. Red Hat Hybrid Cloud 控制台,进入 Integrations 页面,并开始将 Microsoft Azure 集成添加到成本管理:

    1. 导航到 Integrations,点 Add source 以打开 Add a cloud source 向导。
    2. 输入您的集成名称并点 Next
    3. 选择 成本管理 作为应用程序,Microsoft Azure 作为集成类型。点击 Next
  2. 使用 Microsoft Azure 文档中的说明在 Microsoft Azure 帐户中创建资源组和存储帐户,请参阅 Microsoft Azure 文档 创建存储帐户

记录资源组和存储帐户。后续步骤中需要它们。

  1. Red Hat Hybrid Cloud Console Add a cloud source 向导中,输入 Resource group nameStorage account name,然后点 Next

1.2. 选择 Microsoft Azure 成本导出范围

您可以使用 Microsoft Azure Cloud 中的 范围,创建具有不同粒度级别的成本导出数据。Microsoft Azure 支持将成本导出范围为小的资源组,作为包含大量订阅的账单帐户。根据给定用例的成本数据要求,范围可以通过包含多个订阅或隔离对所选资源组的访问来简化成本管理的配置。

注意

如需有关 Microsoft Azure 中范围如何工作的更多信息,请参阅 Azure 文档中的了解和使用 范围

在 Microsoft Azure Cloud Shell 中运行以下命令,以为您的成本导出收集所需的范围:

  1. 要收集您的 Resource Group 范围,请将 ResourceGroupName 替换为 Resource Group 的名称并运行:

    $ az group show --name {ResourceGroupName} | jq .id | tr -d '"'
  2. 要收集您的订阅范围,请运行:

    $ az account show --query "{ id: id }" | jq '.id' | tr -d '"' | awk '{print "/subscriptions/"$0}'
  3. 要收集 Billing Account 范围,请将 billingAccountName 替换为 Billing Account 的名称,并运行:

    $ az billing account show --name "{billingAccountName}" | jq '.id' | tr -d '"'
  4. 要收集您的注册账户范围,请将 registration AccountName 替换为注册帐户的名称并运行:

    $ az billing enrollment-account show --name "{enrollmentAccountName}" | jq '.id' | tr -d '"'
  5. 要收集您的管理组范围,请将 GroupName 替换为管理组的名称并运行:

    $ az account management-group show --name "{GroupName}" | jq '.id' | tr -d '"'
  6. 要收集 Billing Profile 范围,请将 billingAccountNamebillingProfileName 替换为 Billing Account 和 Billing Profile 的名称,并运行:

    $ az billing profile show --account-name "{billingAccountName}" --name "{billingProfileName}" | jq '.id' | tr -d '"'
  7. 要收集您的 Invoice 部分范围,请将 billingAccountName,billingProfileName,invoiceSectionName 替换为 Billing Account, Billing Profile, 和 Invoice 部分的名称,并运行:

    $ az billing invoice section show --account-name "{billingAccountName}" --profile-name "{billingProfileName}" --name "{invoiceSectionName}" | jq '.id' | tr -d '"'

1.3. 配置 Microsoft Azure 角色

红帽建议配置专用凭证,以授予 Microsoft Azure 成本数据的只读访问权限。在 Azure 中配置带有存储帐户 Contributor 和 Reader 角色的服务主体,以提供对成本管理的此访问权限。

  1. 在 Microsoft Azure Cloud Shell 中,运行以下命令来获取您的订阅 ID:

    $ az account show --query "{subscription_id: id }"
  2. Red Hat Hybrid Cloud Console Add a cloud source 向导中,输入 您的订阅 ID。单击 Next 以进入下一屏幕。
  3. 在 Microsoft Azure Cloud Shell 中,运行以下命令来创建成本管理存储帐户 Contributor 角色,并获取您的租户 ID、客户端(应用程序)ID 和客户端 secret:

    $ az ad sp create-for-rbac -n "CostManagement" --role "Storage Account Contributor"  --scope /subscriptions/{subscriptionId}/resourceGroups/{resourceGroup1} --query '{"tenant": tenant, "client_id": appId, "secret": password}'
  4. Red Hat Hybrid Cloud Console Add a cloud source 向导中,输入 Microsoft Azure Tenant IDClient IDClient Secret
  5. 在 Microsoft Azure 中创建一个 Reader 角色,用于成本管理。

    1. 如果成本导出范围是企业协议(EA)帐户,则启动 Microsoft Azure Enterprise Portal,为之前在帐户上创建的管理员角色提供服务主体。如需更多信息,请参阅 Azure 文档中的 分配到成本管理数据的访问
    2. 如果成本导出范围适用于 Microsoft 客户协议(MCA)中的账单帐户、账单配置集或发票部分,请在 Microsoft Azure 门户中启动成本管理和 Billing 服务。选择适当的范围,并提供在 IAM 视图中在适当的 Reader 角色之上创建的服务主体。如需更多信息,请参阅 Azure 文档中的 Microsoft 客户协议管理角色
    3. 如果成本导出范围适用于资源组、订阅或管理组,然后在 Microsoft Azure Cloud Shell 中运行以下命令来创建成本管理 Reader 角色:

      $ az role assignment create --assignee "<your_Client_ID>" --role "Cost Management Reader" --scope {costExportScope}
  6. 点击 Next

1.4. 配置每日 Microsoft Azure 数据导出调度

创建一个周期性任务,每天将您的成本数据导出到 Microsoft Azure 存储帐户,其中成本管理将在所需范围内检索数据。

  1. 在 Microsoft Azure 中,添加新导出,如 Azure 文章 创建和管理导出数据 中所述。

    • Red Hat Hybrid Cloud Console Add a cloud source 向导中提供的导出选择一个 Name
    • 对于 Export type,请选择 Daily export of month-to-date cost
    • 对于 Storage account,请选择您之前创建的帐户。
    • 为导出输入容器名称和目录路径的任何值。这些值提供存储报告文件的存储帐户中的树结构。
    • Run now 开始将数据导出到 Microsoft Azure 存储容器。
  2. Red Hat Hybrid Cloud Console Add a cloud source 向导中,在创建导出调度时点 Next 并查看集成详情。
  3. Finish 完成将 Microsoft Azure 集成添加到成本管理。

创建调度后,成本管理将开始轮询 Microsoft Azure 成本数据,这会在 成本管理 仪表板中显示。

第 2 章 在将 Microsoft Azure 数据集成到成本管理前过滤 Microsoft Azure 数据

您可以在 Microsoft Azure 中配置功能脚本,以复制成本导出和对象存储存储桶,这些成本管理可以访问并过滤您的数据,以与红帽共享您的账单数据子集。

将您的 Microsoft Azure 帐户配置为成本管理集成:

  1. 创建存储帐户和资源组。
  2. 配置存储帐户 Contributor 和 Reader 角色来访问。
  3. 创建一个功能来过滤您要发送给红帽的数据。
  4. 将每日成本导出调度到红帽可访问的存储帐户。
注意

因为不是红帽一部分的第三方产品和文档可以在不通知的情况下改变,因此配置第三方集成的说明一般是常规的,并在发布时更正。有关最新信息,请参阅 Microsoft Azure 文档

Integrations 页面将 Microsoft Azure 集成添加到成本管理。

2.1. 添加 Microsoft Azure 帐户并命名您的集成

将 Microsoft Azure 帐户添加为集成,以便成本管理应用程序可以处理成本和使用数据。

流程

  1. Red Hat Hybrid Cloud Console 中,点 Settings Menu > (Settings)。
  2. Settings 页面中,单击 Integrations
  3. Cloud 选项卡中,点 Add integration
  4. Add a cloud integration 向导中,选择 Microsoft Azure 作为云供应商类型,然后点 Next
  5. 输入您的集成名称并点 Next
  6. Select application 步骤中,选择 成本管理,然后点 Next
  7. 在 Specify cost export scope 步骤中,选择 I want to manually custom the data set sent to Cost Management 并点 Next

2.2. 创建 Microsoft Azure 资源组和存储帐户

在 Microsoft Azure 中创建存储帐户,以保存成本数据和指标,并存储您过滤的成本数据,其中会收集成本管理。创建资源组和存储帐户后,您可以将资源组名称和存储帐户名称粘贴到 Add a cloud source 向导的 Add a cloud source 向导的字段中。

先决条件

  • 您必须具有具有集成管理员权利的红帽用户帐户。

流程

  1. Microsoft Azure 帐户 中,搜索 storage 并点 Storage account

    1. Storage accounts 页面上,单击 Create
    2. Create a storage account 页面上的 Resource Group 字段中,单击 Create new。输入名称,然后单击确定。在本例中,使用 filtered-data-group
    3. 在实例详情部分中,在 Storage account name 字段中输入名称。在本例中,使用 filtereddata
    4. 记录资源组和存储帐户的名称,以便您可以将它们添加到 Red Hat Hybrid Cloud ConsoleAdd a cloud source 向导中,点 Review
    5. 检查存储帐户并点 Create
  2. Red Hat Hybrid Cloud Console Add a cloud source 向导的 Resource group and storage account 页面中,在 Resource group nameStorage account name 中输入值。
  3. 点击 Next

2.3. 查找 Microsoft Azure 订阅 ID

使用 Microsoft Azure Cloud Shell 查找 subscription_id 并将其添加到成本管理中的 Add a cloud source 向导中。

流程

  1. Microsoft Azure 帐户 中,点 Cloud Shell
  2. 输入以下命令获取您的订阅 ID:

    az account show --query "{subscription_id: id }"
  3. 从返回的数据复制 subscription_id 的值。

    响应示例

    {
        "subscription_id": 00000000-0000-0000-000000000000
        }

  4. 将该值粘贴到 Red Hat Hybrid Cloud ConsoleAdd a cloud source 向导的 Subscription ID 页面的 Subscription ID 字段中。
  5. 点击 Next

2.4. 为您的存储帐户创建 Microsoft Azure 角色

使用 Microsoft Azure Cloud Shell 查找您的租户 (Directory) IDClient (应用程序)IDClient secret

流程

  1. Microsoft Azure 帐户 中,点 Cloud Shell
  2. 输入以下命令获取客户端 ID、secret 和租户名称。将值替换为最后一步中的订阅 ID,将 resourceGroup1 替换为之前创建的资源组名称。在本例中,使用 filtered-data-group

    az ad sp create-for-rbac -n "CostManagement" --role "Storage Account Contributor"  --scope /subscriptions/{subscriptionId}/resourceGroups/{resourceGroup1} --query '{"tenant": tenant, "client_id": appId, "secret": password}'
  3. 复制 client_idsecret租户 的返回数据中的值。

    响应示例

    {
        "client_id": "00000000-0000-0000-000000000000",
        "secret": "00000000-0000-0000-000000000000",
        "tenant": "00000000-0000-0000-000000000000"
    }

  4. Red Hat Hybrid Cloud Console 中添加云源 向导中的 Role 步骤中,粘贴 client_id'、secret 和 'tenant 的值。
  5. 在 Cloud shell 中运行以下命令,以创建成本管理 Reader 角色,并将 {Client ID} 替换为上一步中的值。

    az role assignment create --assignee {Client_ID} --role "Cost Management Reader"
  6. 点击 Next

2.5. 在 Microsoft Azure 中创建每日导出

在 Microsoft Azure 中创建功能,以过滤您的数据并根据常规计划导出数据。exports 创建一个周期性任务,将 Microsoft Azure 成本数据定期发送到存储帐户,该存储帐户存在于资源组中。成本管理必须能够访问资源组才能读取 Microsoft Azure 成本数据。这个示例使用 Python 功能来过滤数据并将其发布到之前创建的存储帐户。

流程

  1. 要创建导出,请转至 Microsoft Azure 中的 Portal 菜单,然后点 Cost Management + Billing
  2. 在 Cost Management + Billing 页面上,单击 Cost Management
  3. Settings 菜单中,在 Cost 管理概览页面中,单击 Exports
  4. 要添加导出,请单击 Add
  5. Export details 部分中,将导出命名为:
  6. Storage 部分,添加您创建的资源组。

2.6. 在 Microsoft Azure 中创建功能来过滤您的数据

创建过滤数据的功能,并将其添加到您创建的要与红帽共享的存储帐户中。您可以使用示例 Python 脚本从与红帽费用相关的成本导出中收集成本数据,并将其添加到存储帐户中。

先决条件

  • 在您的设备上必须安装 Visual Studio Code。
  • 您必须在 Visual Studio Code 中安装 Microsoft Azure 功能扩展。

流程

  1. 登录到您的 Microsoft Azure 帐户。要开始创建功能应用程序,请 在搜索栏中输入功能,选择 Functions,然后单击 Create

    1. 在 Create Function App 页面中,通过添加资源组来配置您的功能应用程序。
    2. Instance Details 部分中,将功能命名为 app。
    3. 对于运行时堆栈,请选择 Python
    4. 对于版本,请选择 3.10
  2. Review + create:

    1. Create
    2. Go to resource 来配置函数。
  3. 在功能应用程序菜单中,点击 Functions 来创建时间触发器功能:

    1. Create
    2. 在开发环境字段中,选择 VSCode
  4. 打开 Visual Studio Code,并确保安装了 Microsoft Azure Functions Visual Studio Code 扩展。要创建 Azure 功能,Microsoft 建议使用 Microsoft Visual Studio Code IDE 来开发和部署代码。有关配置 Visual Studio Code 的更多信息,请参阅 Quickstart: 使用 Visual Studio Code 在 Azure 中使用 Python 创建功能

    1. 点 Visual Studio Code 中的 Microsoft Azure 选项卡,登录到 Azure。
    2. 在 Visual Studio Code 的 Workspaces 选项卡中,点 Create function
    3. 按照提示为您的功能设置本地位置,并为功能选择语言和版本。在本例中,选择 Python,然后选择 Python 3.9
    4. Select a template for your project first function 对话框中,选择 Timer trigger,命名功能,然后按 Enter
    5. 为希望该函数运行时设置 cron 表达式。在本例中,使用 0*9*** 在每天上午 9 点运行该功能。
    6. Create
  5. 在开发环境中创建功能后,打开 requirements.txt 文件,添加以下要求并保存文件:

    azure-functions
    pandas
    requests
    azure-identity
    azure-storage-blob
  6. 打开 __init__.py 并粘贴以下 Python 脚本。将标记为 # Required vars 的部分中 的值更改为您的环境的值。对于 USERPASS 值,您可以选择使用 Key Vault 凭据 将用户名和密码配置为环境变量。

    import datetime
    import logging
    import uuid
    import requests
    import pandas as pd
    from azure.identity import DefaultAzureCredential
    from azure.storage.blob import BlobServiceClient, ContainerClient
    
    import azure.functions as func
    
    
    def main(mytimer: func.TimerRequest) -> None:
        utc_timestamp = datetime.datetime.utcnow().replace(
            tzinfo=datetime.timezone.utc).isoformat()
    
        default_credential = DefaultAzureCredential()
    
        now = datetime.datetime.now()
        year = now.strftime("%Y")
        month = now.strftime("%m")
        day = now.strftime("%d")
        output_blob_name=f"{year}/{month}/{day}/{uuid.uuid4()}.csv"
    
        # Required vars to update
        USER = os.getenv('UsernameFromVault')                                   # Cost management username
        PASS = os.getenv('PasswordFromVault')                                   # Cost management password
        integration_id = "<your_integration_id>"                                          # Cost management integration_id
        cost_export_store = "https://<your-cost-export-storage-account>.blob.core.windows.net"           # Cost export storage account url
        cost_export_container = "<your-cost-export-container>"                                     # Cost export container
        filtered_data_store = "https://<your_filtered_data_container-storage-account>.blob.core.windows.net"         # Filtered data storage account url
        filtered_data_container = "<your_filtered_data_container>"                                   # Filtered data container
    
        # Create the BlobServiceClient object
        blob_service_client = BlobServiceClient(filtered_data_store, credential=default_credential)
        container_client = ContainerClient(cost_export_store, credential=default_credential, container_name=cost_export_container)
    
        blob_list = container_client.list_blobs()
        latest_blob = None
        for blob in blob_list:
            if latest_blob:
                if blob.last_modified > latest_blob.last_modified:
                    latest_blob = blob
            else:
                latest_blob = blob
    
        bc = container_client.get_blob_client(blob=latest_blob)
        data = bc.download_blob()
        blobjct = "/tmp/blob.csv"
        with open(blobjct, "wb") as f:
            data.readinto(f)
        df = pd.read_csv(blobjct)
    
        filtered_data = df.loc[((df["publisherType"] == "Marketplace") & ((df["publisherName"].astype(str).str.contains("Red Hat")) | (((df["publisherName"] == "Microsoft") | (df["publisherName"] == "Azure")) & (df['meterSubCategory'].astype(str).str.contains("Red Hat") | df['serviceInfo2'].astype(str).str.contains("Red Hat")))))]
    
        filtered_data_csv = filtered_data.to_csv (index_label="idx", encoding = "utf-8")
    
        blob_client = blob_service_client.get_blob_client(container=filtered_data_container, blob=output_blob_name)
    
        blob_client.upload_blob(filtered_data_csv, overwrite=True)
    
        # Post results to console.redhat.com API
        url = "https://console.redhat.com/api/cost-management/v1/ingress/reports/"
        json_data = {"source": integration_id, "reports_list": [f"{filtered_data_container}/{output_blob_name}"], "bill_year": year, "bill_month": month}
        resp = requests.post(url, json=json_data, auth=(USER, PASS))
        logging.info(f'Post result: {resp}')
    
        if mytimer.past_due:
            logging.info('The timer is past due!')
    
        logging.info('Python timer trigger function ran at %s', utc_timestamp)
  7. 保存该文件。
  8. 将功能部署到 Microsoft Azure。

2.7. 配置 Microsoft Azure 角色

配置专用凭证,以授予您的功能 blob 访问权限 Microsoft Azure 成本数据,以便可以将数据从原始存储容器传输到过滤的存储容器。

流程

  1. Microsoft Azure 帐户 中,在搜索栏中输入 功能
  2. 查找您的功能并选择它。
  3. Settings 菜单中,单击 Identity
  4. 在 Identity 页面上,单击 Azure 角色分配
  5. Role assignments 页面上,单击 Add role assignment
  6. Scope 字段中,选择 Storage scope。
  7. Resource 字段中,选择您创建的存储帐户。在本例中,使用 filtereddata
  8. 在 role 字段中,选择 Storage Blob Data Contributor
  9. 点击 Save
  10. 重复这些步骤,为 Storage Queue Data Contributor 创建角色。
  11. 对您创建的其他存储帐户重复此步骤。在本例中,使用 billingexportdata
  12. Red Hat Hybrid Cloud ConsoleAdd a cloud integration 向导中,点 Next
  13. 查看向导中提供的信息,然后点 Add

第 3 章 管理成本的后续步骤

添加 OpenShift Container Platform 和 Microsoft Azure 集成后,除了通过集成显示成本数据外,成本管理会自动显示与在其平台上运行 OpenShift Container Platform 集群相关的 Azure 成本和使用量。

成本管理 概述页上,您的成本数据按照 OpenShift基础架构 选项卡进行排序。选择 Perspective 通过成本数据的不同视图切换。

您还可以使用全局导航菜单查看云供应商成本的更多详情。

3.1. 限制对成本管理资源的访问

在成本管理中添加和配置集成后,您可以限制对成本数据和资源的访问。

您可能不希望用户访问所有成本数据。相反,您只能向用户授予特定于其项目或机构的数据的访问权限。通过基于角色的访问控制,您可以限制成本管理报告中的资源的可见性。例如,您可以将用户的视图限制为只有 AWS 集成,而不是整个环境。

要了解如何限制访问,请参阅更深入的指南 限制对成本管理资源的访问

3.2. 为您的集成配置标记

成本管理应用程序通过标签跟踪云和基础架构成本。在 OpenShift 中,标签也称为标签。

您可以在成本管理中优化标签,过滤和属性资源,按成本组织资源,并为云基础架构的不同部分分配成本。

重要

您只能直接在集成上配置标签和标签。您可以选择在成本管理中激活的标签,但无法在成本管理应用程序中编辑标签和标签。

要了解更多有关以下主题的信息,请参阅使用标记管理成本数据

  • 规划标记策略以组织您的成本数据视图
  • 了解成本管理关联标签的方式
  • 在集成上配置标签和标签

3.3. 配置成本模型以准确报告成本

现在,您已将集成配置为以成本管理方式收集成本和使用数据,您可以配置成本模型,将价格与指标和使用相关联。

成本模型是一个框架,它使用原始成本和指标来定义成本管理成本的计算。您可以记录、分类和分发成本模型给特定客户、业务单元或项目产生的成本。

成本 模型中,您可以完成以下任务:

  • 将成本分类为基础架构或补充成本
  • 捕获 OpenShift 节点和集群的每月成本
  • 应用标记以考虑其他支持成本

要了解如何配置成本模型,请参阅使用成本模型

3.4. 使用 Cost Explorer 可视化您的成本

使用成本管理 Cost Explorer 创建时间扩展成本和使用信息的自定义图形,并最终视觉化并解释您的成本。

要了解更多有关以下主题的信息,请参阅使用 Cost Explorer 可视化您的成本

  • 使用 Cost Explorer 识别异常事件
  • 了解如何随着时间推移您的成本数据变化
  • 为您的成本和使用数据创建自定义条图表
  • 导出自定义成本数据表

对红帽文档提供反馈

如果您发现了错误,或者对如何改进这些指南有建议,请在 成本管理 JIRA 板 中创建一个问题并添加 Documentation 标签。

非常感谢您的反馈意见!

法律通告

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.