跳转至

采集器「Azure-Monitor Metric 采集」配置手册

阅读本文前,请先阅读:

使用本采集器前,必须安装「观测云集成 Core 核心包」及其配套的第三方依赖包

该采集器默认支持开启多线程(默认开启五个线程),如果需要更改线程池大小,可以设置环境变量 COLLECTOR_THREAD_POOL_SIZE

1. 配置结构

本采集器配置结构如下:

字段 类型 是否必须 说明
targets list 必须 云监控采集对象配置列表
相同命名空间的多个配置之间逻辑关系为「且」
targets[#].namespace str 必须 所需采集的云监控命名空间(Azure 资源类型)。
以 VirtualMachines 为例:'Microsoft.Compute/virtualMachines'
取值参考附录
targets[#].metrics list 必须 所需采集的云监控指标名列表
取值参考附录
targets[#].metrics[#] str 必须 指标名模式,支持"NOT"、通配符方式匹配
正常情况下,多个之间逻辑关系为「或」
包含"NOT"标记时,多个之间逻辑关系为「且」。
详见下文
subscriptions list 必须 所需采集的订阅 ID 列表
subscriptions[#] str 订阅 ID
locations list 非必须 地域列表
locations[#] str 地域,例:westus2
## 2. 配置示例

指定特定指标

采集 VM 中名称为CPU Credits ConsumedCPU Credits Remaining的 2 个指标

Python
1
2
3
4
5
6
7
8
collector_configs = {
    'targets': [
        {
            'namespace': 'Microsoft.Compute/virtualMachines',
            'metrics'  : ['CPU Credits Consumed', 'CPU Credits Remaining'],
        },
    ],
}

通配符匹配指标

指标名可以使用*通配符来匹配。

本例中以下指标会被采集:

  • 名称为CPU Credits Consumed的指标
  • 名称以CPU开头的指标
  • 名称以Remaining结尾的指标
  • 名称中包含IOPS的指标
Python
1
2
3
4
5
6
7
8
collector_configs = {
    'targets': [
        {
            'namespace': 'Microsoft.Compute/virtualMachines',
            'metrics'  : ['CPU Credits Consumed', 'CPU*', '*Remaining', '*IOPS*'],
        },
    ],
}

剔除部分指标

在开头添加"NOT"标记表示去除后面的指标。

本例中,以下指标【不会】被采集:

  • 名称为CPU Credits Consumed的指标
  • 名称以CPU开头的指标
  • 名称以Remaining结尾的指标
  • 名称中包含IOPS的指标
Python
1
2
3
4
5
6
7
8
collector_configs = {
    'targets': [
        {
            'namespace': 'Microsoft.Compute/virtualMachines',
            'metrics'  : ['NOT', 'CPU Credits Consumed', 'CPU*', '*Remaining', '*IOPS*'],
        },
    ],
}

多重过滤指定所需指标

相同的命名空间可以指定多次,从上到下依次按照指标名进行过滤。

本例中,相当于对指标名进行了如下过滤步骤:

  1. 选择所有名称中包含CPU的指标
  2. 在上一步结果中,去除名称为CPU Credits Consumed的指标
Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
collector_configs = {
    'targets': [
        {
            'namespace': 'Microsoft.Compute/virtualMachines',
            'metrics'  : ['*CPU*'],
        },
        {
            'namespace': 'Microsoft.Compute/virtualMachines',
            'metrics'  : ['NOT', 'CPU Credits Consumed'],
        },
    ],
}

配置过滤器(可选项)

本采集器脚本支持用户自定义过滤器,让用户通过对象属性筛选出目标资源。过滤器函数返回值为 True|False

  • True:目标资源需要被采集。
  • False 目标资源不需要被采集

当开启自定义对象采集时,将支持筛选更多的对象属性,详情请参考对应产品的自定义对象采集器文档

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 示例:开启过滤器,根据 resourceId 属性过滤,配置格式如下:

def filter_metrics(instance, namespace='Microsoft.Compute/virtualMachines'):
    '''
    采集 资源 ID 为 /subscriptions/xxxx/xxx1, /subscriptions/xxxx/xxx2 的指标
    '''
    resource_id = instance['tags'].get('resourceId')
    if resource_id in ['/subscriptions/xxxx/xxx1', '/subscriptions/xxxx/xxx2']:
        return True
    return False

from guance_integration__runner import Runner
import guance_azure_monitor__main as main

@DFF.API('Azure-Monitor Metric Collection', timeout=3600, fixed_crontab="*/5 * * * *")
def run():
    Runner(main.DataCollector(account, collector_configs, filters=[filter_metrics])).run()

相同 namespace 下配置多个过滤器时同时满足所有过滤器才会上报

3. 数据采集说明

云产品配置信息

云产品配置包含两个必要参数,分别是 namespacemetrics,下面以 Microsoft.Compute/virtualMachines 为例: 1. namespace 命名空间,命名空间既微软云产品资源类型(不区分大小写),取值:"Microsoft.Compute/virtualMachines"。

  1. metrics 需要采集指标列表,参考 Microsoft.Compute/virtualMachines 支持的指标 「REST API 中的名称」列,取值:["Available Memory Bytes", "CPU Credits Consumed"]

4. 数据上报格式

数据正常同步后,可以在观测云的「指标」中查看数据。

以如下采集器配置为例:

Python
1
2
3
4
5
6
7
8
collector_configs = {
    'targets': [
        {
            'namespace': 'Microsoft.Compute/virtualMachines',
            'metrics'  : ['CPU*'],
        },
    ],
}

上报的数据示例如下:

JSON
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
{
  "measurement": "azure_compute_virtualmachines",
  "tags": {
    "location"       : "eastus",
    "resource_group" : "func-resource",
    "resource_id"    : "/subscriptions/xxxx/xxx1",
    "subscription_id": "63a4a998-bd43-4cca-bd86-c4e7ed33a643",
    "tenant_id"      : "ce9fe5b4-ba02-4c9a-b54e-f0bbff18579c",
    "unit"           : "Count"
  },
  "fields": {
    "cpu_credits_consumed_average" : 0.0,
    "cpu_credits_remaining_average": 98.97
  }
}

所有的指标值都会以 float 类型上报

由于 Azure 原数据 field key 命名没有统一的规范,采集器在上报时统一成小写下划线

5. 与自定义对象采集器联动

当同一个 DataFlux Func 中运行了其他自定义对象采集器(如 VirtualMachines)时,本采集器会自动根据tags.resourceId等字段尝试匹配自定义对象中的tags.name字段(自定义对象中 tags.name 字段就取自 resourceId)。

由于需要先获知自定义对象信息才能在云监控类采集器中进行联动,因此一般建议将云监控的采集器放置在列表末尾,如:

Python
1
2
3
4
5
    # 创建采集器
    collectors = [
        azure_vm.DataCollector(account, common_azure_configs),
        azure_monitor.DataCollector(account, monitor_collector_configs), # 云监控类采集器一般放在最末尾
    ]

当成功匹配后,会将所匹配的自定义对象tags中的字段加入到监控数据的tags中。具体效果如下:

假设云监控采集到的原始数据如下:

JSON
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
  "measurement"  : "azure_compute_virtualmachines",
  "tags": {
    "resource_id": "/subscriptions/xxxx/xxx1",
    "unit"       : "Count",
    "{其他字段}"   : "{略}"
  },
  "fields": {
    "{指标}"      : "{指标值}"
  }
}

同时,微软云 VM 采集器采集到的自定义对象数据如下:

JSON
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
  "measurement": "azure_compute_virtualmachines",
  "tags": {
    "name"          : "/subscriptions/xxxx/xxx1",
    "resource_id"   : "/subscriptions/xxxx/xxx1",
    "power_state"   : "running",
    "computer_name" : "test_vm",
    "zone"          : "1",
    "{其他字段}"     : "{略}"
  },
  "fields": {
    "{其他字段}": "{略}"
  }
}

那么,最终上报的云监控数据如下:

JSON
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
{
"measurement": "azure_compute_virtualmachines",
  "tags": {
    "name"          : "/subscriptions/xxxx/xxx1",
    "resource_id"    : "/subscriptions/xxxx/xxx1",
    "power_state"    : "running",
    "computer_name"  : "test_vm",
    "zone"          : "1",
    "unit"          : "Count",
    "{其他字段}"   : "{略}"
  },
  "fields": {
    "{指标}": "{指标值}"
  }
}

6. 云监控调用次数说明

Azure 监控对部分 API 调用次数有免费额度限制(目前:查询 API 免费额度 100 万次/月,超出部分按 $0.01 美元/千次收费),本采集器所使用的 /{resourceUri}/providers/Microsoft.Insights/metrics 也在限制范围内,以下对脚本集调用次数做出详细解释:

1. 用户有多个资源,需要采集多种监控项,判断会不会超过免费额度:

本采集器使用 /{resourceUri}/providers/Microsoft.Insights/metrics(查询资源的指标值)一次请求可以获取某个资源某种纬度下的多个监控项(监控项的 timeGrain 相同最多获取 20 个监控项,超过则需发下一次请求)。

2. 通过查看任务执行日志,找到真实调用次数:

采集器对任务每次执行结果所调用的 API 次数有统计,可以在日志中查看,例:

Bash
1
2
3
4
[2023-10-24 14:31:53.203] [+6569ms] 第【1】个账号采集完毕,共执行【16784 毫秒】,期间调用 API【2 次】
[2023-10-24 14:31:53.203] [+6569ms] 详细调用如下:
[2023-10-24 14:31:53.203] [+6569ms] -> management.azure.com/{resourceUri}/providers/microsoft.insights/metricdefinitions: 1[2023-10-24 14:31:53.203] [+6569ms] -> management.azure.com/{resourceUri}/providers/microsoft.insights/metrics: 1

鉴于云监控调用次数有免费额度,建议用户选择监控项时按需配置,避免通配造成额外消费

注意事项

常见错误及解决办法

X. 附录

Azure 相关文档: