跳转至

观测云集成


本文档主要介绍使用脚本市场中「观测云集成」系列脚本包同步阿里云、AWS 平台相关数据的接入处理。

提示:请始终使用最新版 DataFlux Func 进行操作。

提示 2: 本脚本包会不断加入新功能,请随时关注本文档页。

1. 背景

在使用观测云的过程中,第三方云平台的一些数据可能无法通过 DataKit 直接采集。

因此,DataFlux Func 提供了与各云平台对应的数据同步脚本包。用户可以从脚本市场安装相关的数据同步脚本包,进行简单的配置后,即可同步云平台的数据。

本文假设用户已经了解如何安装 DataFlux Func 以及脚本包,以及如何在 DataFlux Func 中正确连接 DataKit。

相关文档 链接
有关如何安装 DataFlux Func DataFlux Func 快速开始
有关如何在 DataFlux Func 的脚本市场中安装脚本包 脚本市场基本操作
有关如何在 DataFlux Func 中连接 DataKit 连接并操作 DataKit

2. 关于「阿里云集成」系列脚本包

本脚本包主要用于第三方云平台数据的获取并同步至观测云。

使用本脚本包,需要对应云平台中具有必要权限的 AK。如对于阿里云,您可在阿里云「访问控制」中创建 RAM 账号,并为 RAM 账号创建 AK 并授予所需权限。

注意:为了您的账号安全,请使用只读权限的 AK

注意 2:部分第三方云平台由于其产品设计,可能需要全部只读权限的 AK 才能访问

注意 3:最快捷的方法是使用具有全部云资源只读权限的 AK(如阿里云的ReadOnlyAccess),如果部分信息的读取有顾虑,可以根据实际需要单独指定权限

2.1 脚本包组成

本「观测云集成」系列脚本包采用了全新的设计,区分了「核心包」与特定采集器包。

其中,「核心包」为必选组件。使用本系列脚本包时,必须保证「核心包」已经安装。

具体组成如下:

名称 说明
观测云集成 Core 核心包
ID: guance_integration
所有特定集成包的核心组件,必须安装
观测云集成(阿里云-云监控采集)
ID: guance_aliyun_monitor
采集阿里云云监控数据,并写入指标的组件
云监控数据包含所有阿里云产品的指标数据
观测云集成(阿里云-ECS 采集)
ID: guance_aliyun_ecs
采集阿里云 ECS 列表,并写入自定义对象的组件
其他更多。..

3. 快速开始

这里,我们假设需要对阿里云监控的数据进行采集并写入观测云,讲解整个集成过程。

提示:请提前准备好符合要求的阿里云 AK(简单起见,可直接授予全局只读权限ReadOnlyAccess

3.1 安装核心包和具体采集器

在「管理」-「脚本市场」中,依次点击并按照对应的脚本包卡片:

  • 「观测云集成 Core 核心包」(ID:guance_integration)
  • 「观测云集成(阿里云-云监控)」(ID:guance_aliyun_monitor)

注意:在安装「核心包」后,系统会提示安装第三方依赖包,按照正常步骤安装即可

3.2 编写代码

注意:虽然安装后的脚本包可以修改,但请不要直接修改这些从脚本市场安装的脚本包

在「开发」-「脚本库」中,添加自己的脚本集和脚本,如:

  1. 创建 ID 为my_aliyun的脚本集
  2. 在上述 1. 中创建的脚本集中,创建 ID 为main的脚本

【假设】我们需要采集阿里云 ECS 的云监控,和 CPU、内存相关的指标数据。

由于这类指标数据由阿里云监控提供,那么,需要编写的典型代码:

from guance_integration__runner import Runner        # 引入启动器
import guance_aliyun_monitor__main as aliyun_monitor # 引入阿里云云监控采集器

# 账号配置
account = {
    'ak_id'     : '<具有合适权限的阿里云 AK ID>',
    'ak_secret' : '<具有合适权限的阿里云 AK Secret>',
    'extra_tags': {
        'account_name': '我的阿里云账号',
    }
}

@DFF.API('执行云资产同步')
def run():
    # 采集器配置
    collector_configs = {
        'targets': [
            {
                'namespace': 'acs_ecs_dashboard', # 云监控的 namespace
                'metrics'  : ['*cpu*', '*mem*'],  # 云监控指标中包含 cpu, mem 的指标数据
            },
        ],
    }
    collectors = [
        aliyun_monitor.DataCollector(account, collector_configs),
    ]

    # 启动执行
    Runner(collectors).run()

3.3 创建自动触发配置

在完成上述代码编写后,点击「发布」脚本。

之后,在「管理」-「自动触发配置」中,为已编写的脚本创建自动触发配置即可。

注意:过高的频率只会快速消耗 AK 调用 API 的额度,甚至会被云平台限流、封号,由此产生的问题 DataFlux Func 并不能解决。

3.4 采集多个产品

对于需要同时采集多个产品的情况,无需重复编写多个函数,只需要在collectors列表中添加更多采集器即可。

以采集「阿里云监控 + ECS + RDS + SLB + OSS」为例,参考代码如下:

from guance_integration__runner import Runner        # 引入启动器
import guance_aliyun_ecs__main as aliyun_ecs         # 引入阿里云 ECS 采集器
import guance_aliyun_rds__main as aliyun_rds         # 引入阿里云 RDS 采集器
import guance_aliyun_slb__main as aliyun_slb         # 引入阿里云 SLB 采集器
import guance_aliyun_oss__main as aliyun_oss         # 引入阿里云 OSS 采集器
import guance_aliyun_monitor__main as aliyun_monitor # 引入阿里云云监控采集器

# 账号配置
account = {
    'ak_id'     : '<具有合适权限的阿里云 AK ID>',
    'ak_secret' : '<具有合适权限的阿里云 AK Secret>',
    'extra_tags': {
        'account_name': '我的阿里云账号',
    }
}

# 由于采集数据较多,此处需要为函数指定更大的超时时间(单位秒)
@DFF.API('执行云资产同步', timeout=300)
def run():
    # 采集器配置
    common_aliyun_configs = {
        'regions': [ 'cn-hangzhou' ], # ECS、RDS、SLB、OSS 的配置相同
    }
    monitor_collector_configs = {
        'targets': [
            { 'namespace': 'acs_ecs_dashboard', 'metrics': ['*cpu*', '*mem*'] },
            { 'namespace': 'acs_rds_dashboard', 'metrics': ['*cpu*', '*iops*'] },
            { 'namespace': 'acs_slb_dashboard', 'metrics': ['*traffic*'] },
            { 'namespace': 'acs_oss_dashboard', 'metrics': ['*internet*'] },
        ],
    }

    # 创建采集器
    collectors = [
        aliyun_ecs.DataCollector(account, common_aliyun_configs),
        aliyun_rds.DataCollector(account, common_aliyun_configs),
        aliyun_slb.DataCollector(account, common_aliyun_configs),
        aliyun_oss.DataCollector(account, common_aliyun_configs),
        aliyun_monitor.DataCollector(account, monitor_collector_configs),
    ]

    # 启动执行
    Runner(collectors).run()

3.5 代码详解

以下为本例中代码的分步解释。

实际上,所有的「观测云集成」类脚本的使用都可以使用类似的方法实现。

import 部分

为了正常使用脚本市场提供的脚本,在安装脚本包后,需要通过import方式来引入这些组件。

from guance_integration__runner import Runner
import guance_aliyun_monitor__main as aliyun_monitor

Runner是所有采集器的实际启动器,任何情况下都需要引入Runner来完成对采集器的启动。 aliyun_monitor即为本示例中所需的「阿里云-云监控」采集器

账号配置部分

为了能够正常调用云平台的 API,用户也需要提供对应平台的 AK 供采集器使用。

account = {
    'ak_id'     : '<具有合适权限的阿里云 AK ID>',
    'ak_secret' : '<具有合适权限的阿里云 AK Secret>',
    'extra_tags': {
        'account_name': '我的阿里云账号',
    }
}

除了最基本的ak_idak_secret外,部分云平台账号可能同时需要提供额外的内容,如 AWS 的Region等,具体可以参考具体采集器本身的文档。

最后,每个账号还允许添加一个extra_tags的字段,允许用户为采集的数据统一添加相同的标签,方便在观测云中辨认不同的数据所属的账号。

extra_tags的 Key、Value 都为字符串,内容不限,且支持多个 Key、Value。

在本例中,我们通过为extra_tags配置{ 'account_name': '我的阿里云账号' },将所有本账号的数据都加上了account_name=我的阿里云账号标签

函数定义部分

在 DataFlux Func 中,所有代码都必须包含在某个被@DFF.API(...)装饰的函数中。

@DFF.API('执行云资产同步')
def run():
    # 具体代码略。..

@DFF.API(...)装饰器第一个参数为标题,内容随意。

对于观测云集成的脚本来说,最终都是通过「自动触发配置」方式运行脚本,只有添加了@DFF.API(...)装饰器的函数才能够被创建为「自动触发配置」。

采集器配置部分

除了配置对应云平台的账号,还需要对采集器进行配置。

采集器的配置可以在具体采集器的文档中找到,本文此处仅作使用提示

collector_configs = {
    'targets': [
        {
            'namespace': 'acs_ecs_dashboard', # 云监控的 namespace
            'metrics'  : ['*cpu*', '*mem*'],  # 云监控指标中包含 cpu, mem 的指标数据
        },
    ],
}
collectors = [
    aliyun_monitor.DataCollector(account, collector_configs),
]

阿里云监控需要配置采集的目标。在本例中,我们指定了只采集有关 ECS 中,和 CPU、内存有关的指标。

最后,需要使用上文中的账号配置以及这里的采集器配置,生成具体的「采集器实例」。

启动运行部分

采集器的运行需要统一的Runner启动器来运行。

启动器需要使用在上文中生成的具体「采集器实例」初始化,并调用run()函数启动运行。

启动器会遍历所有传入的采集器并依次将采集后的数据上报至 DataKit(默认 DataKit 的数据源 ID 为datakit)。

Runner(collectors).run()

在代码编写完成后,如果不确定配置是否正确,可以为启动器添加debug=True参数使其在调试模式下运行。

在调试模式下运行的启动器,会正常进行数据采集操作,但最终不会写入 DataKit,如下:

Runner(collectors, debug=True).run()

如果需要写入的 DataKit 的数据源 ID 不为默认的datakit,那么,可以为启动器添加datakit_id="<DataKit ID>"来指定 DataKit 的数据源 ID,如下:

Runner(collectors, datakit_id='<DataKit ID>').run()

4. 其他云厂商代码参考

其他云厂商的配置方式与阿里云类似

亚马逊(AWS)

以采集「EC2 实例对象」及「EC2 相关的监控指标」为例:

from guance_integration__runner import Runner
import guance_aws_ec2__main as aws_ec2
import guance_aws_cloudwatch__main as aws_cloudwatch

# 账号配置
account = {
    'ak_id'     : '<具有合适权限的 AWS AK ID>',
    'ak_secret' : '<具有合适权限的 AWS AK Secret>',
    'extra_tags': {
        'account_name': '我的 AWS 账号',
    }
}

@DFF.API('执行云资产同步')
def run():
    regions = ['cn-northwest-1']

    # 采集器配置
    ec2_configs = {
        'regions': regions,
    }
    cloudwatch_configs = {
        'regions': regions,
        'targets': [
            {
                'namespace': 'AWS/EC2',
                'metrics'  : ['*cpu*'],
            },
        ],
    }
    collectors = [
        aws_ec2.DataCollector(account, ec2_configs),
        aws_cloudwatch.DataCollector(account, cloudwatch_configs),
    ]

    # 启动执行
    Runner(collectors).run()

腾讯云

以采集「CVM 实例对象」及「CVM 相关的监控指标」为例:

from guance_integration__runner import Runner
import guance_tencentcloud_cvm__main as tencentcloud_cvm
import guance_tencentcloud_monitor__main as tencentcloud_monitor

# 账号配置
account = {
    'ak_id'     : '<具有合适权限的腾讯云 Secret ID>',
    'ak_secret' : '<具有合适权限的腾讯云 Secret Key>',
    'extra_tags': {
        'account_name': '我的腾讯云账号',
    }
}

@DFF.API('执行云资产同步')
def run():
    regions = ['ap-shanghai']

    # 采集器配置
    cvm_configs = {
        'regions': regions,
    }
    monitor_configs = {
        'regions': regions,
        'targets': [
            {
                'namespace': 'QCE/CVM',
                'metrics'  : ['*cpu*'],
            },
        ],
    }
    collectors = [
        tencentcloud_cvm.DataCollector(account, cvm_configs),
        tencentcloud_monitor.DataCollector(account, monitor_configs),
    ]

    # 启动执行
    Runner(collectors).run()