跳转至

采集器「微软云-云监控」配置手册

阅读本文前,请先阅读:

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

采集微软云云监控数据前,必须先配置对应产品的自定义对象采集器

1. 配置结构

本采集器配置结构如下:

字段 类型 是否必须 说明
targets list 必须 云监控采集对象配置列表
相同命名空间的多个配置之间逻辑关系为「且」
targets[#].namespace str 必须 所需采集的云监控命名空间。如:'Microsoft.Compute/virtualMachines'
总表见附录
targets[#].metrics list 必须 所需采集的云监控指标名列表
总表见附录
targets[#].metrics[#] str 必须 指标名模式,支持"NOT"、通配符方式匹配
正常情况下,多个之间逻辑关系为「或」
包含"NOT"标记时,多个之间逻辑关系为「且」。
详见下文

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
18
# 示例:开启过滤器,根据对象的 id,instance_name 属性过滤,配置格式如下:

def filter_instance(instance, namespace='Microsoft.Compute/virtualMachines'):
    '''
    采集 id 为 /subscriptions/xxxx/xxx1, /subscriptions/xxxx/xxx2 且 instance_name 为 test1 的指标
    '''
    id = instance.get('id')
    instance_name = instance.get('instance_name')
    if id in ['/subscriptions/xxxx/xxx1', '/subscriptions/xxxx/xxx2'] and instance_name in ['test1']:
        return True
    return False

from guance_integration__runner import Runner
import guance_azure_monitor__main as main

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

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

3. 数据采集说明

云产品配置信息

产品名称 命名空间 (Namespace) 说明
虚拟机 Microsoft.Compute/virtualMachines

监控指标配置信息

Microsoft.Compute/virtualMachines

指标英文名 (MetricName) 指标中文名
Available Memory Bytes 可用内存字节数(预览版)
CPU Credits Consumed 已用 CPU 信用额度
CPU Credits Remaining 剩余 CPU 信用额度
Data Disk Bandwidth Consumed Percentage 已使用的数据磁盘带宽百分比
Data Disk IOPS Consumed Percentage 已使用的数据磁盘 IOPS 的百分比
Data Disk Max Burst Bandwidth 数据磁盘最大突发带宽
Data Disk Max Burst IOPS 数据磁盘最大突发 IOPS
Data Disk Queue Depth 数据磁盘队列深度
Data Disk Read Bytes/sec 数据磁盘读取字节数/秒
Data Disk Read Operations/Sec 数据磁盘读取操作数/秒
Data Disk Target Bandwidth 数据磁盘目标带宽
Data Disk Max Burst IOPS 数据磁盘最大突发 IOPS
Data Disk Queue Depth 数据磁盘队列深度
Data Disk Read Bytes/sec 数据磁盘读取字节数/秒
Data Disk Read Operations/Sec 数据磁盘读取操作数/秒
Data Disk Target Bandwidth 数据磁盘目标带宽
Data Disk Target IOPS 数据磁盘目标 IOPS
Data Disk Used Burst BPS Credits Percentage 数据磁盘已用突发 BPS 额度百分比
Data Disk Used Burst IO Credits Percentage 数据磁盘已用突发 IO 额度百分比
Data Disk Write Bytes/sec 数据磁盘写入字节数/秒
Data Disk Write Operations/Sec 数据磁盘写入操作数/秒
Disk Read Bytes 磁盘读取字节数
Disk Read Operations/Sec 磁盘读取操作次数/秒
Disk Write Bytes 磁盘写入字节数
Disk Write Operations/Sec 磁盘写入操作次数/秒
Inbound Flows 入站流数
Inbound Flows Maximum Creation Rate 入站流最大创建速率
Network In 可计费网络传入量(已弃用)
Network In Total 网络传入流量总计
Network Out 可计费网络流出量(已弃用)
Network Out Total 网络传出流量总计
OS Disk Bandwidth Consumed Percentage 已使用的 OS 磁盘带宽百分比
OS Disk IOPS Consumed Percentage 已使用的 OS 磁盘 IOPS 的百分比
OS Disk Max Burst Bandwidth OS 磁盘最大突发带宽
OS Disk Max Burst IOPS OS 磁盘最大突发 IOPS
OS Disk Queue Depth OS 磁盘队列深度
OS Disk Read Bytes/sec OS 磁盘读取字节数/秒
OS Disk Read Operations/Sec OS 磁盘读取操作次数/秒
OS Disk Target Bandwidth OS 磁盘目标带宽
OS Disk Target IOPS OS 磁盘目标 IOPS
OS Disk Used Burst BPS Credits Percentage OS 磁盘已用突发 BPS 额度百分比
OS Disk Used Burst IO Credits Percentage OS 磁盘已用突发 IO 额度百分比
OS Disk Write Bytes/sec OS 磁盘写入字节数/秒
OS Disk Write Operations/Sec OS 磁盘写入操作次数/秒
Outbound Flows 出站流
Outbound Flows Maximum Creation Rate 出站流最大创建速率
Percentage CPU CPU 百分比
Premium Data Disk Cache Read Hit 高级数据磁盘缓存读取命中
Premium Data Disk Cache Read Miss 高级数据磁盘缓存读取未命中
Premium OS Disk Cache Read Hit 高级 OS 磁盘缓存读取命中
Premium OS Disk Cache Read Miss 高级 OS 磁盘缓存读取未命中
VM Cached Bandwidth Consumed Percentage 已使用的 VM 缓存带宽百分比
VM Cached IOPS Consumed Percentage 已使用的 VM 缓存 IOPS 的百分比
VM Local Used Burst BPS Credits Percentage VM 缓存已用突发 BPS 额度百分比
VM Local Used Burst IO Credits Percentage VM 缓存已用突发 IO 额度百分比
VM Remote Used Burst BPS Credits Percentage VM 未缓存已用突发 BPS 额度百分比
VM Remote Used Burst IO Credits Percentage VM 未缓存已用突发 IO 额度百分比
VM Uncached Bandwidth Consumed Percentage 已使用的 VM 未缓存带宽百分比
VM Uncached IOPS Consumed Percentage 已使用的 VM 未缓存 IOPS 的百分比
VmAvailabilityMetric VM 可用性指标(预览)

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
{
  "measurement": "azure_Microsoft.Compute/virtualMachines",
  "tags": {
    "id"  : "/subscriptions/xxxx/xxx1",
    "unit": "count"
  },
  "fields": {
    "CPU Credits Consumed_average" : 0.02,
    "CPU Credits Remaining_average": 170.21
  }
}

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

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

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

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

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

当成功匹配后,会将所匹配的自定义对象tags中除name以外的字段加入到监控数据的tags中,以此实现在使用实例名称筛选云监控的指标数据等效果。具体效果如下:

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

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

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

JSON
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
  "measurement": "azure_vm",
  "tags": {
    "name"           : "/subscriptions/xxxx/xxx1",
    "id"             : "/subscriptions/xxxx/xxx1",
    "instance_name"  : "test_vm",
    "{其他字段}"     : "{略}"
  },
  "fields": {
    "{其他字段}": "{略}"
  }
}

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

JSON
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
"measurement": "azure_Microsoft.Compute/virtualMachines",
  "tags": {
    "id"           : "/subscriptions/xxxx/xxx1",
    "unit"         : "Count",
    "instance_name": "test_vm",
    "{其他字段}"   : "{略}"
  },
  "fields": {
    "{指标}": "{指标值}"
  }
}

6. 云监控调用次数说明

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

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

本采集器使用 /{resourceUri}/providers/Microsoft.Insights/metrics(查询资源的指标值)一次请求能获取某个资源下的多个监控项(监控项的 timeGrain 相同且最多获取 20 个监控项,超过则需发下一次请求)。请求次数举例说明:

  • 账号下有 2 个 vm 资源需要采集 CPU Credits Consumed 1 个监控项,需要 2 次请求;
  • 账号下有 2 个 vm 资源需要采集 CPU Credits Consumed、CPU Credits Remaining 2 个监控项,监控项的 timeGrain 都等于 PT1M,需要 2 次请求(每个资源请求一次 );
  • 账号下有 2 个 vm 资源需要采集 CPU Credits Consumed、CPU Credits Remaining 等 20 个监控项,监控项的 timeGrain 包括 PT1M PT5M 两种,需要 4 次请求;
  • 账号下有 2 个 vm 资源需要采集 CPU Credits Consumed、CPU Credits Remaining 等 25 个监控项,监控项的 timeGrain 包括 PT1M PT5M 两种,最多 6 次请求;

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

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

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

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

注意事项

常见错误及解决办法

  1. 采集实例数量与实际存在实例数量不一致

原因:实例状态为关机状态

解决方法:

  • 开启实例。

X. 附录

请参考微软云官方文档: