你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Monitor 中的 Azure 资源管理器指标

在 Azure 中创建和管理资源时,将通过 Azure 的控制平面(即 Azure 资源管理器)编排你的请求。 本文介绍如何监视向 Azure 发出的控制平面请求的数量和延迟。

使用这些指标,可以在整个订阅中观察控制平面请求的流量和延迟。 例如,你现在可以通过检查被限制的请求检查服务器错误来筛选特定的状态代码,从而确定请求何时受到限制或发生失败。

这些指标最长可在三个月(93 天)内查看,并且仅跟踪同步请求。 对于像创建 VM 这样的方案,指标并不能代表长时间运行的异步操作的性能或可靠性。

访问 Azure 资源管理器指标

你可以通过 Azure Monitor REST API、SDK 和 Azure 门户访问控制平面指标(通过选择“Azure 资源管理器”指标)。 有关 Azure Monitor 的概述,请参阅 Azure Monitor 指标

没有选择加入或注册过程来访问控制平面指标。

有关如何检索持有者令牌并向 Azure 发出请求的指南,请参阅 Azure REST API 参考

指标定义

Azure Monitor 中 Azure 资源管理器指标的定义只能通过 2017-12-01-preview API 版本来访问。 要检索定义,可以运行以下代码段,并将你的订阅 ID 替换为“00000000-0000-0000-0000-000000000000”:

curl --location --request GET 'https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/microsoft.insights/metricDefinitions?api-version=2017-12-01-preview&metricnamespace=microsoft.resources/subscriptions' \
--header 'Authorization: bearer {{bearerToken}}'

此代码片段将返回指标架构的定义。 值得注意的是,此架构包括可以使用 Monitor API 来进行筛选的维度:

维度名称 说明
ResourceUri 特定资源的完整资源 ID。
RequestRegion 控制平面请求所在的 Azure 资源管理器区域,例如“EastUS2”。 此区域不是资源的位置。
StatusCode Azure 资源管理器中针对你的控制平面请求的响应类型。 可能的值包括但不限于:
- 0
- 200
- 201
- 400
- 404
- 429
- 500
- 502
StatusCodeClass 从 Azure 资源管理器返回的状态代码的类。 可能的值包括:
- 2xx
- 4xx
- 5xx
命名空间 资源提供程序的命名空间,全部大写,如“MICROSOFT.COMPUTE”
ResourceType 你在 Azure 中创建或向其发送请求的任何资源类型,全大写,如“VIRTUALMACHINES”
方法 向 Azure 资源管理器发出的请求中使用的 HTTP 方法。 可能的值包括:
- GET
- HEAD
- PUT
- POST
- PATCH
- DELETE

示例

现在,让我们了解一些可以帮助你探索 Azure 资源管理器指标的方案。

通过 Azure 门户查询流量和延迟控制平面指标

首先,导航到门户中的 Azure Monitor 边栏选项卡:

导航到 Azure 门户的“监视”页面的屏幕截图,其中突出显示了 Explore 指标。

选择“浏览指标”后,选择单个订阅,然后选择“Azure 资源管理器”指标:

Azure 门户中,选择单个订阅和 Azure 资源管理器指标的屏幕截图。

然后,在选择“应用”后,你可以使用自定义过滤和拆分来可视化你的“流量”或“延迟”控制平面指标:

Azure 门户中指标可视化效果的屏幕截图,其中显示了根据维度筛选和拆分的选项。

通过 REST API 查询流量和延迟控制平面指标

在通过 Azure 进行身份验证后,便可以请求检索订阅的控制平面指标。 在脚本中,将“00000000-0000-0000-0000-000000000000”替换为订阅 ID。 脚本将检索 2 天时间跨度内的平均请求延迟(以秒为单位)以及请求总数(按 1 天间隔细分):

curl --location --request GET "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/microsoft.insights/metrics?api-version=2021-05-01&interval=P1D&metricnames=Latency&metricnamespace=microsoft.resources/subscriptions&region=global&aggregation=average,count&timespan=2021-11-01T00:00:00Z/2021-11-03T00:00:00Z" \
--header "Authorization: bearer {{bearerToken}}"

对于 Azure 资源管理器指标,你可以使用“延迟”指标并包括“计数”聚合,以此来检索流量计数。 你将看到请求的 JSON 响应:

{
    "cost": 5758,
    "timespan": "2021-11-01T00:00:00Z/2021-11-03T00:00:00Z",
    "interval": "P1D",
    "value": [
        {
            "id": "subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Insights/metrics/Latency",
            "type": "Microsoft.Insights/metrics",
            "name": {
                "value": "Latency",
                "localizedValue": "Latency"
            },
            "displayDescription": "Latency data for all requests to Azure Resource Manager",
            "unit": "Seconds",
            "timeseries": [
                {
                    "metadatavalues": [],
                    "data": [
                        {
                            "timeStamp": "2021-11-01T00:00:00Z",
                            "count": 1406.0,
                            "average": 0.19345163584637273
                        },
                        {
                            "timeStamp": "2021-11-02T00:00:00Z",
                            "count": 1517.0,
                            "average": 0.28294792353328935
                        }
                    ]
                }
            ],
            "errorCode": "Success"
        }
    ],
    "namespace": "microsoft.resources/subscriptions",
    "resourceregion": "global"
}

如果只想检索流量计数,则可以将“流量”指标与“计数”聚合一起使用:

curl --location --request GET 'https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/microsoft.insights/metrics?api-version=2021-05-01&interval=P1D&metricnames=Traffic&metricnamespace=microsoft.resources/subscriptions&region=global&aggregation=count&timespan=2021-11-01T00:00:00Z/2021-11-03T00:00:00Z' \
--header 'Authorization: bearer {{bearerToken}}'

请求的响应为:

{
    "cost": 2879,
    "timespan": "2021-11-01T00:00:00Z/2021-11-03T00:00:00Z",
    "interval": "P1D",
    "value": [
        {
            "id": "subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Insights/metrics/Traffic",
            "type": "Microsoft.Insights/metrics",
            "name": {
                "value": "Traffic",
                "localizedValue": "Traffic"
            },
            "displayDescription": "Traffic data for all requests to Azure Resource Manager",
            "unit": "Count",
            "timeseries": [
                {
                    "metadatavalues": [],
                    "data": [
                        {
                            "timeStamp": "2021-11-01T00:00:00Z",
                            "count": 1406.0
                        },
                        {
                            "timeStamp": "2021-11-02T00:00:00Z",
                            "count": 1517.0
                        }
                    ]
                }
            ],
            "errorCode": "Success"
        }
    ],
    "namespace": "microsoft.resources/subscriptions",
    "resourceregion": "global"
}

对于支持维度的指标,需要指定维度值才能查看相应的指标值。 例如,如果要关注成功请求对 ARM 的“延迟”,则需要使用“2XX”来筛选 StatusCodeClass 维度。

如果要查看在订阅中对网络资源(如虚拟网络和负载均衡器)发出的请求数,需要筛选 MICROSOFT.NETWORK 的命名空间维度。

检查受限制的请求

若要仅查看受限制的请求,需要进行筛选以仅显示 429 状态代码响应。 对于 REST API 调用,可通过 $filter 属性和 StatusCode 维度来完成筛选,方法是附加 $filter=StatusCode eq '429',如以下代码片段结尾所示:

curl --location --request GET 'https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/microsoft.insights/metrics?api-version=2021-05-01&interval=P1D&metricnames=Latency&metricnamespace=microsoft.resources/subscriptions&region=global&aggregation=count,average&timespan=2021-11-01T00:00:00Z/2021-11-03T00:00:00Z&$filter=StatusCode%20eq%20%27429%27' \
--header 'Authorization: bearer {{bearerToken}}'

你也可以直接在门户中进行筛选:筛选 HTTP 状态代码以在 Azure 门户中仅显示 429 个响应。

检查服务器错误

与查看受限制的请求类似,你可以通过筛选出 5xx 响应来查看返回服务器错误响应代码的所有请求。 对于 REST API 调用,可通过 $filter 属性和 StatusCodeClass 维度来完成筛选,方法是附加 $filter=StatusCodeClass eq '5xx',如以下代码片段结尾所示:

curl --location --request GET 'https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/microsoft.insights/metrics?api-version=2021-05-01&interval=P1D&metricnames=Latency&metricnamespace=microsoft.resources/subscriptions&region=global&aggregation=count,average&timespan=2021-11-01T00:00:00Z/2021-11-03T00:00:00Z&$filter=StatusCodeClass%20eq%20%275xx%27' \
--header 'Authorization: bearer {{bearerToken}}'

还可以通过将筛选器属性设置为“StatusCodeClass”并将值设置为“5xx”在门户中完成对通用服务器错误的筛选,这类似于在限制示例中进行的操作。

后续步骤