【云驻共创】华为云之超融合数据中心生态方案

举报
愚公搬代码 发表于 2024/04/15 22:45:17 2024/04/15
【摘要】 超融合基础设施(HCI, Hyper-Converged Infrastructure)是一种软件定义的数据中心架构,它将计算、存储、网络和虚拟化资源整合在一个物理或软件定义的单元中。与传统的数据中心架构相比,超融合基础设施通过简化管理、提高资源利用率和加快部署速度来提升数据中心的效率和灵活性。

🚀前言

超融合基础设施(HCI, Hyper-Converged Infrastructure)是一种软件定义的数据中心架构,它将计算、存储、网络和虚拟化资源整合在一个物理或软件定义的单元中。与传统的数据中心架构相比,超融合基础设施通过简化管理、提高资源利用率和加快部署速度来提升数据中心的效率和灵活性。

随着云计算、大数据和人工智能等技术的发展,超融合基础设施正在不断演进,以满足更加复杂和动态的业务需求。新一代HCI解决方案正在融入更多的自动化和智能化功能,比如自动化的资源优化、基于AI的运维自动化等,进一步提升数据中心的效率和灵活性。此外,HCI也正逐渐融入公有云、私有云和边缘计算等更广泛的环境中,为数字化转型提供强大的基础设施支持。

🚀一、DCN网络数字地图&Runbook+AOC生态方案介绍

🔎1.什么是DCN网络数字地图

DCN网络数字地图通常指的是"数据中心网络(Data Center Network)"的数字地图,这种地图用于描绘和管理数据中心内部的网络结构和资源。数据中心网络是现代互联网服务和云计算基础设施的核心,支持大量数据和高速度的信息交换。DCN网络数字地图能够帮助网络管理员和工程师可视化网络的布局、配置、以及运行状态,从而有效地进行网络规划、故障排查和性能优化。

在这里插入图片描述
随着数据中心技术的发展,DCN网络数字地图变得越来越复杂和智能,能够提供更多高级功能,如自动化的网络配置、基于人工智能的性能优化建议等。这些工具和技术的发展不仅提高了数据中心的运营效率,也为云计算和大数据服务的提供创造了条件。

🔎2.DCN网络数字地图生态水平解决方案介绍

生态方案简介:基于网络数字地图的生态方案是一种旨在提升网络管理效率、增强系统集成能力和提供全面网络洞察的解决方案。这种方案通过构建一个中心化的数字地图平台,实现了与第三方伙伴系统的集成对接,包括管理数据库(CMDB)、网络性能监控(NPM)、应用性能管理(APM)等。

生态方案的关键组成部分

  • 网络数字地图:作为方案的核心,网络数字地图提供了对网络资源、拓扑结构、流量和性能的全面可视化展示。它使得网络管理变得直观且高效,帮助管理员快速定位问题并进行决策。
  • 生态插件:这些插件是实现数字地图与第三方系统集成的关键。它们允许数字地图平台通过标准化或定制化的接口与外部系统交换数据和指令,支持各种不同的对接方式,如API调用、数据库共享等。

其中生态插件是数字地图和伙伴的连接桥梁,可以支撑四大UC功能实现、支持不同厂商系统、不同对接方式、增强了控制器开放性可用性。

在这里插入图片描述

🔎3.DCN网络数字地图四大UC介绍

网络数字地图的水平生态解决方案通过其四大典型案例,提供了一个全面、直观且高效的网络管理和监控框架。这些案例反映了该解决方案在不同维度上对网络可视化和管理的深入应用。

🦋3.1 全网一图呈现

  • 定义:在单一视图上展示客户的全部ICT资源和网络架构,包括但不限于服务器、存储设备、网络设备和服务等。
  • 优势:帮助管理员和决策者快速理解整个网络的架构和状态,促进更有效的资源管理和规划。
  • 应用场景:用于大规模网络管理、资产管理、规划和优化等。

🦋3.2 路径一键导航

  • 定义:提供一个直观的界面,展示网络流的真实路径,从源头到目的地,帮助用户快速识别和定位网络中的问题点。
  • 优势:加快故障诊断和问题解决的速度,提高网络的可靠性和性能。
  • 应用场景:网络故障排查、性能优化、安全审计等。

🦋3.3 应用网络互视

  • 定义:建立应用层和网络层之间的映射关系,使得从应用角度可以直接关联到其依赖的网络结构。
  • 优势:当应用出现问题时,能够迅速定位到相关的网络层面的问题,缩短问题解决时间,提高应用的可用性和稳定性。
  • 应用场景:应用性能监控、网络优化、故障排查等。

🦋3.4 智能搜索定位

  • 定义:通过高效的搜索功能,帮助用户快速定位网络中的各种资源和问题点,如设备位置、配置信息、状态指标等。
  • 优势:提升运维效率,减少手动搜索和定位所需的时间和努力,支持快速响应和问题处理。
  • 应用场景:日常运维管理、紧急故障处理、资产管理等。

网络数字地图水平生态解决方案实现了对网络资源的全面可视化管理,提供了一种更加高效、直观的方式来监控和维护复杂的网络环境。这种方案尤其适合于规模庞大、结构复杂的网络环境,帮助企业最大化地利用其ICT资源,同时确保网络的稳定性和高效性。
在这里插入图片描述

🔎4.什么是Runbook、AOC

在这里插入图片描述

🦋4.1 Runbook

Runbook工作流编排是一种高效的网络和IT服务管理工具,旨在自动化和简化日常运维任务,尤其是在复杂的数据中心环境中。通过提供一个可视化的界面来编排工作流,Runbook工具允许运维团队设计和实施业务流程,而无需进行复杂的代码开发。这种方式不仅提高了网络变更和服务部署的速度和灵活性,还增强了整体的自动化效率和可靠性。

Runbook工作流的关键特性:

特性 描述
可视化编排 提供一个直观的界面,允许通过拖放操作设计和配置工作流,实现复杂运维任务的可视化管理。
RESTful接口支持 通过支持RESTful API接口,能够与其他IT和网络管理系统集成,实现数据和指令的无缝传递。
Dry Run试运行 允许在实际执行前进行试运行,预测和评估工作流执行结果,帮助识别潜在问题和风险。
仿真全流程回滚 支持在执行过程中若发现问题,能够迅速恢复到变更前的状态,最大限度减少对业务的影响。
业务快速上线 通过简化的工作流设计和自动化执行过程,实现业务的分钟级快速上线,大幅缩短项目交付时间。
灵活自定义能力 用户可以根据具体需求灵活自定义网络变更和服务部署工作流,无需编写代码,提升工作效率和响应速度。
提升自动化效率及可靠性 自动化运维任务不仅提升了效率,还通过减少人为错误来增加网络服务的可靠性。

🦋4.2 AOC

AOC(敏捷开放容器)是一种先进的网络技术框架,旨在提高网络设备和服务的可编程性、灵活性和开放性。它通过提供端到端的南向(Southbound)开放服务能力,允许网络管理员和开发者以更灵活和动态的方式来控制和管理网络资源。AOC的核心在于采用YANG模型驱动,这是一种用于网络配置管理的数据建模语言,它支持设备和网络功能的可编程性。

AOC(敏捷开放容器)的关键特点及其描述:

关键特点 描述
YANG模型驱动 利用YANG数据模型来标准化网络配置和状态信息的描述,实现高度的网络资源管理精度和控制能力。
设备驱动可编程 支持对不同厂商和技术的网络设备进行编程,增强了网络的适应性和灵活性。
统一部署和仿真 能够跨硬件SDN、软件SDN、传统网络及多云多厂商环境进行统一的网络部署和仿真,提高了网络部署的效率和一致性。
复杂业务0断点编排 通过高级的业务编排能力,实现在业务部署和运维过程中不影响正在运行的服务,确保“零断点”,增强了网络服务的连续性和可靠性。

🔎5.伙伴合作方案简介

🦋5.1 问题

目前网络自动化/工具仅在单个需求触发下运作,缺乏系统性整体设计。部分网络功能仍依赖手工线下处理,部分运维数据仍在线下管理,难以有效支持网络自动化和智能化能力的进一步提升。

🦋5.2 方案

通过“自智网络”创新项目,结合runbook与AOC流程编排以及采控平台,实现对不同厂商、不同型号的网络设备的统一管理,以此提升“自智网络”运维能力,巩固企业数智化转型的基础。

🦋5.3 价值

  • 易用性: 支持拖拽式图形化编排,同时支持导入Yaml、Yang格式的接口定义文件。
  • 开放性: 发布工作流后,系统自动生成开放API,并对接第三方自动化系统; 支持自定义资源包,并使用自定义资源包进行业务编排。
  • 安全发放: 支持DryRun,为用户提供配置预览能力; 支持回滚已发放工作流,快速进行网络配置恢复。
  • 端到端可视化: 任务执行过程中,支持通过进度信息查看操作详情,包括输入、输出详情和错误信息。
  • 显著效果: 解决日常高频重复性工作,减少线下沟通成本,无需进行大量命令的手工输入和记忆,从根本上减少线下脚本编写,无需关注脚本准确性、命令规范等,全程可视化管理,提升运维效率30%以上。

在这里插入图片描述

🔎6.伙伴合作方案五大典型场景

伙伴合作方案包括服务器上线、防火墙策略开通/封禁、互联网业务开通服务器扩缩容、线路切换五大典型场景。

典型场景 描述
服务器上线 自动分配服务器上线所需的关键参数,如IP地址、接入交换机接入端口、VLAN等,同时支持人工干预,以满足特殊需求。
防火墙策略开通/封禁 根据需求,针对特定IP地址执行策略开通或封禁动作,并在确定的执行设备位置配置相应策略。
互联网业务开通 当业务需要互联网访问或需要访问互联网时,自动核实并在匹配的路由器/交换机上下发配置,并自动更新防火墙上的安全策略。
服务器扩缩容 允许应用维护团队在线填写业务参数修改或服务器集群扩缩容需求,系统组人员负责在线需求审核、处理和变更服务。
线路切换 在主用链路质量下降或发生故障时,主动切换到备用链路,保障业务的正常运行。

在这里插入图片描述

🚀二、DCN网络数字地图四大UC及集成对接开发

🔎1.全网一图呈现

🦋1.1 业务挑战

☀️1.1.1 客户简介

某银行股份有限公司是全国性的股份制商业银行,在全国大部分省市设立了分支机构,实现了对长三角、环渤海、珠三角及海西地区和部分中西部地区的有效覆盖,是公司的重要客户。

☀️1.1.12 客户痛点

无统一网络拓扑管理平台网络不可视,七国八制,分区各自管,网络割据式管理和运维,无全局视图,人工维护拓扑,组网信息掌握在技术专家脑子里,逐段甚至逐跳排查、逐流定位。全网资产盘点、拓扑盘点效率低下,如:银监会每年例行检查,提前2周人工收集汇总统计整理,且仍以分区域形式、多图向银监会展示,无统一的网络拓扑管理平台。

☀️1.1.3 网络拓扑完整度不高

网络拓扑完整度不高,客户数据中心网络涉及多地多中心,网元数量多并且厂商复杂,这给客户运维带来了多方面的挑战。部分区域拓扑信息缺失,部分区域依赖PPT等工具静态维护,全网总体拓扑准确率不足60%。

🦋1.2 解决方案

对于客户痛点,华为超融合数据中心网络数字地图解决方案基于网络资源、计算资源、应用服务资源、最终用户等数据,为客户提供“全网一图呈现”、“拓扑还原”、“应用网络互视”和“路径一键导航”等功能,减少问题定位时间,提高运维人员运维效率。

☀️1.2.1 全网一图呈现

通过大数据和AI技术,关联生成一张动态的数字地图。网络拓扑多级精细化可视:一级展示数据中心分布、二级展示数据中心内区域间拓扑、三级展示单区域详细的拓扑互联关系,展示互联线路丢包率、带宽利用率等路况质量,多厂家、多类型、多协议网元覆盖,动态刷新。同时,还能够在网络拓扑上呈现交换机下联的服务器,以及服务器内的虚拟机分布。在一张图上呈现了客户的所有ICT资源整体的架构,解决了网络数据线上化的问题。

图 1 :一级-企业网络全貌
image.png

图 2 :二级-数据中心整网
在这里插入图片描述
图 3 :三级-单区域内网络
在这里插入图片描述

☀️1.2.2 拓扑还原

数字地图面向数据中心全网,通过开放性、多样化的数据接入能力对接全网设备或三方系统,采集网络的设备、服务器、应用、LLDP、MAC、ARP、路由等数据,然后基于LLDP、MAC表、流量特征等拓扑还原算法,从数据中心视角呈现整个中心的网络拓扑、服务器拓扑、虚拟网络拓扑和应用拓扑。

图 4 :拓扑还原
在这里插入图片描述

🦋1.3 开发指南

☀️1.3.1 采集流程

在这里插入图片描述

☀️1.3.2 开发业务脚本

业务脚本是Python格式的脚本文件,在设计采集流程时导入MDC,执行采集时MDC会根据脚本中的代码进行采集。

须知:

  • 本系统为开放可编程系统,界面支持自定义逻辑输入及显示查看;用户在使用本系统进行设计时,应避免在界面输入敏感信息,如密码等,以防信息泄露。

  • 本开发业务脚本的操作人员需要具备Python、RESTful、JSON基础。

  • 本开发脚本的过程中,应避免打印包含个人数据、认证口令、绝对路径等敏感信息的日志,防止造成敏感信息泄露。

☀️1.3.3 下载SDK

数字地图预置了部分SDK,SDK中包含了多种类型数据的采集用例模板,供用户下载开发。

☀️1.3.4 预置SDK介绍

已预置的SDK的功能介绍如表1所示。

表 1 SDK功能介绍
在这里插入图片描述

☀️1.3.5 下载SDK

  1. 在“数字地图“APP的菜单中选择“数据采集 > 三方系统采集 > 下载python SDK“。

  2. 选择需要下载的SDK,单击“点击下载“。

    在这里插入图片描述

  3. 下载的SDK为.zip格式的压缩包,需解压后再使用。

☀️1.3.6 业务脚本开发示例

🌈1.3.6.1 背景信息

业务脚本需要继承内置SDK的BFOPythonAPI类,并且放置在根目录下。引用脚本中的业务逻辑需要重写BFOPythonAPI类的execute方法。

内置SDK中BFOPythonAPI类的方法定义如下:

from typing import Union
class BFOPythonAPI(object):
    def execute(self, input: dict, context: dict) -> Union[dict, None]:
        raise NotImplemented("Function execute not implemented.")

input:脚本入参数集,类型为dict。比如:界面定义脚本输入参数a,通过input[‘a’]可获取其值。

context:上下文参数。实现脚本暂停执行功能时调用BFO的内置SDK需要传入该参数。

返回类型为dict或None。当界面定义了输出参数时,用户想要将脚本运行结果赋值给其输出参数时,需要保证其模型相同。

引用脚本重写BFOPythonAPI类的execute方法,示例如下:

from typing import Union
class TestBFOPythonAPI(BFOPythonAPI):
    def execute(self, input: dict, context: dict) -> Union[dict, None]:
        return{'b': input['a']}

业务脚本支持多种数据入库方式,可根据使用场景自行选择,各入库方式的说明如表2所示。

表 2 入库方式说明
在这里插入图片描述

须知:
全量同步过程中存量数据会被覆盖,请谨慎使用。

业务脚本当前仅支持增量同步的入库方式,即采集数据时仅将新增数据和修改数据同步入库,相关代码为notify_data(data)。

业务脚本所需要的数据模型请参考附录

🌈1.3.6.2 开发示例

以采集三方系统设备信息为例,基于基本SDK中模板开发的业务脚本。

import logging
from typing import Union
from bfo import BFOPythonAPI
from bfo.bfo_instance_oper import check_interrupt
from third_system_common.util.odrs.process.update_process import report_total
from third_system_common.util.odrs.save.notify_data import notify_data
from third_system_common.util.wrapper.exception_wrapper import exception_handler
from third_system_common.util.wrapper.setting_wrapper import setting
from third_system_common.util.constants import error_code
from third_system_common.util.exception.base_exception import StopException
class TestBFOPythonAPI(BFOPythonAPI): 
    @setting()    //@setting()支持设置数据校验策略,validate="jump"表示遇到数据校验错误跳过并记录到采集详情页中,validate="throws"表示遇到错误直接返回报错,程序结束。默认不设置值表示遇到错误跳过。
    @exception_handler()  //@exception_handler()表示记录脚本运行期间的错误到采集详情页中,同时报错,程序结束
    def execute(self, input: dict, context: dict) -> Union[dict, None]:    //新建类必须继承BFOPythonAPI,重写execute方法,为固定格式。
        system_name = input['systemName']     //获取脚本入参数集,对应界面脚本输入参数。
        url = input['url']
        proxy_client = ProxyClient(system_name=system_name, request_url=url, request_method=RequestMethod.GET)          //获取客户三方系统数据,新建一个三方系统连接对象,具体源码参考基本SDK。
        data = []
        is_last_page = False               //是否查询到最后一页 
        pageNum = 1                        
        pageSize = 100                     //分页查询数据,例如从第1页开始,每页取100条数据为例。
        while not is_last_page:
            check_interrupt(context)  //采集过程中,用户在Web页面单击“立即终止”后,停止采集。
            request_query_param = {
                "pageNum": pageNum,
                "pageSize": pageSize
            }
            response = proxy_client.proxy_query_data(
                request_query_param=request_query_param)  // 请求客户三方系统查询设备信息接口的url,携带分页参数。
            if len(response['data']) > 0:
  // 获取到数据,将数据放入data对象中,pageNum加1,继续查询下一页,否则认为查到最后一页了,查询结束。
                data.extend(response['data'])
                pageNum += 1
            else:
                is_last_page = True
        report_total(len(data))   //上报应采数据总数
        devs = []  // 数据转换流程,将三方系统的设备数据转换成数字地图设备模型。
        for dev in data:  
            check_interrupt(context)  //采集过程中,用户在Web页面单击“立即终止”后,停止采集。
            ne = Equipment()  // 新建设备模型对象,具体源码参考基本SDK的entity文件夹。
            ne.name = dev["nename"]
            ne.ip = dev["neip"]
            ne.mac = dev["nemac"]
            ne.version = dev["version"]
            ne.product_name = dev["netype"]
            ne.classification = device_type.get(dev["necategory"])
            ne.manufacturer = dev["nevendorname"]
            devs.append(ne)
        notify_data(devs,proxy_client.systemId,True)  // 增量同步入库。
        return None

以采集三方系统设备配置文件为例,基于基本SDK+sftp客户端SDK中的模板开发的业务脚本。

import logging
from typing import Union
from bfo import BFOPythonAPI
from third_system_sftp.sftp_util import SftpUtil
from third_system_common.util.wrapper.exception_wrapper import exception_handler
from third_system_common.util.wrapper.setting_wrapper import setting
def get_current_date():
    import time  // 获取当前日期,格式为:yyyyMMdd。
    now = int(time.time())
    timeStruct = time.localtime(now)
    strTime = time.strftime("%Y%m%d", timeStruct)
    return strTime
class TestBFOPythonAPI(BFOPythonAPI):
    @setting()    //@setting()支持设置数据校验策略,validate="jump"表示遇到数据校验错误跳过并记录到采集详情页中,validate="throws"表示遇到错误直接返回报错,程序结束。默认不设置值表示遇到错误跳过。
    @exception_handler()  //@exception_handler()表示记录脚本运行期间的错误到采集详情页中,同时报错,程序结束
    def execute(self, input: dict, context: dict) -> Union[dict, None]:  // 新建类必须继承BFOPythonAPI,重写execute方法,为固定格式。
        host = input['host']  // 获取脚本入参数集,对应界面脚本输入参数。Sftp下载必要参数:服务器IP、端口、用户名和密码。
        port = input['port']
        username = input['username']
        password = input['password']
        remoteDir = '/' + get_current_date()  // 定义远程文件目录,客户实际目录可能随日期变化,每次执行实时生成目录。
        sftp = SftpUtil(host=host, port=port, username=username, password=password,
                        remoteDir=remoteDir)  // 初始化SFTP客户端并建立连接。
        sftp.download_dir()
        sftp.upload_hofs(context)  // 如果是下载设备配置,调用此方法,上传平台,提供给页面查看。
        sftp.clear_dir() // 下载的文件使用完毕之后,请务必调用此方法及时清理临时文件,否则可能因磁盘空间占用无法释放,最终导致服务不可用。因未清理而产生的风险,由客户自行处置并承担后果。
        return None

以采集三方系统设备信息为例,基于基本SDK+Kafka客户端SDK中模板开发的业务脚本。

from typing import Union
from bfo import BFOPythonAPI
from kafka import KafkaConsumer
from third_system_common.util.wrapper.exception_wrapper import exception_handler
from third_system_common.util.wrapper.setting_wrapper import setting
def callback(msg, context):  // 定义回调方法消费数据
    value = json.loads(msg)  //按需转换模型及数据入库,参考[•以采集三方系统设备信息为例,基于基本SDK中模...](#zh-cn_topic_0000001445363196_li13650111514469)。
    ...
class TestBFOPythonAPI(BFOPythonAPI):
    @setting()    //@setting()支持设置数据校验策略,validate="jump"表示遇到数据校验错误跳过并记录到采集详情页中,validate="throws"表示遇到错误直接返回报错,程序结束。默认不设置值表示遇到错误跳过。
    @exception_handler()  //@exception_handler()表示记录脚本运行期间的错误到采集详情页中,同时报错,程序结束。
    def execute(self, input: dict, context: dict) -> Union[dict, None]:
        topic = input['topic']    //获取脚本入参数集,对应界面脚本输入参数。kafka必要参数:topic、bootstrapServers、groupId(建议新增消费组)。
        bootstrap_servers = input['bootstrapServers']
        group_id = input['group_id']
        consumer = Consumer(topic=topic, bootstrap_servers=bootstrap_servers, group_id=group_id) //若涉及安全认证配置,请参考python-kafka三方包的API。
        consumer.consume(callback, context) 
        return None

🦋1.4 客户价值

华为超融合数据中心网络数字地图解决方案为客户实现了“全网一图呈现”,大幅降低运维成本和提升了运维效率,为客户带来了以下价值:

  • 三级网络拓扑可视:逐级放大,精细化可视,真正看清网络全貌。

  • 网络下挂服务器位置可视:增加全网服务器及详细信息呈现,基于多模态表征AI推理技术智能还原,一图呈现,相当于交通地图上精准标示各个地点的位置。

  • 云服务器内虚拟网络拓扑可视:服务器网络拓扑可视,vSwitch的配置信息、上行物理链路信息、下连VM配置信息等全部可见 。

  • 提升全网拓扑准确率:根据设备配置、ARP表、MAC表、端口流量特征、LLDP 5类数据,采用华为研发的多模态表征AI推理技术,精准识别和还原。

🔎2.应用网络互视

🦋2.1 业务挑战

☀️2.1.1 客户简介

某银行股份有限公司是全国性的股份制商业银行,在全国大部分省市设立了分支机构,实现了对长三角、环渤海、珠三角及海西地区和部分中西部地区的有效覆盖,是公司的重要客户。

☀️2.1.2 客户痛点

🌈2.1.2.1 网络与应用割裂

客户的网络不感知应用、与应用完全割裂,运维人员只能被动应对和人工协同,故障定位效率低,定界不清晰,亟需改变。日常运维和故障定界定位等场景效率低下,定位VM位置使用工具和人工,平均耗时超过10分钟,业务流异常需要逐段排查,平均耗时超过30分钟,任意一对IP间流量路径需要逐跳定位复原超过30分钟。

应用、网络运维数据分散,无法形成有效的数字化运维管理手段,当客户应用网络出现问题,应用到网络依赖专家经验对照映射,逐段排查IP地址、链路和网络质量,应用报障的网络根因问题平均定位时间超过2小时。

🦋2.2 解决方案

对于客户痛点,华为超融合数据中心网络数字地图解决方案基于网络资源、计算资源、应用服务资源、最终用户等数据,为客户提供“全网一图呈现”、“拓扑还原”、“应用网络互视”和“路径一键导航”等功能,减少问题定位时间,提高运维人员运维效率。

☀️2.2.1 应用网络互视

华为超融合数据中心网络数字地图解决方案除了展示网络拓扑之外,还可以展示应用拓扑,并能够呈现应用和网络之间的关系:呈现应用所关联的服务器,及其对应的物理设备拓扑连线关系,展示应用朋友圈,应用与应用之间互访关系。通过网络数字地图,使得网络运维人员从网络看清了应用,更系统、更直观的实现了从交易到ICT基础设施的信息关联。

图 1 :应用与网络互视
在这里插入图片描述
图 2 :应用部署的服务器集群全景
在这里插入图片描述
图 3 :应用部署的网络拓扑全景
在这里插入图片描述

🦋2.3 开发指南

☀️2.3.1 采集流程

在这里插入图片描述

☀️2.3.2 开发业务脚本

业务脚本是Python格式的脚本文件,在设计采集流程时导入MDC,执行采集时MDC会根据脚本中的代码进行采集。

须知:

  • 本系统为开放可编程系统,界面支持自定义逻辑输入及显示查看;用户在使用本系统进行设计时,应避免在界面输入敏感信息,如密码等,以防信息泄露。

  • 开发业务脚本的操作人员需要具备Python、RESTful、JSON基础。

  • 开发脚本的过程中,应避免打印包含个人数据、认证口令、绝对路径等敏感信息的日志,防止造成敏感信息泄露。

☀️2.3.3 下载SDK

网络数字地图预置了部分SDK,SDK中包含了多种类型数据的采集用例模板,供用户下载开发。

☀️2.3.4 预置SDK介绍

已预置的SDK的功能介绍如表1所示。

表 1 SDK功能介绍
在这里插入图片描述

☀️2.3.5 下载SDK

  1. 在“数字地图“APP的菜单中选择“数据采集 > 三方系统采集 > 下载python SDK“。

  2. 选择需要下载的SDK,单击“点击下载“。
    在这里插入图片描述

  3. 下载的SDK为.zip格式的压缩包,需解压后再使用

☀️2.3.6 业务脚本开发示例

🌈2.3.6.1 背景信息

业务脚本需要继承内置SDK的BFOPythonAPI类,并且放置在根目录下。引用脚本中的业务逻辑需要重写BFOPythonAPI类的execute方法。

内置SDK中BFOPythonAPI类的方法定义如下:

from typing import Union
class BFOPythonAPI(object):
    def execute(self, input: dict, context: dict) -> Union[dict, None]:
        raise NotImplemented("Function execute not implemented.")

input:脚本入参数集,类型为dict。比如:界面定义脚本输入参数a,通过input[‘a’]可获取其值。

context:上下文参数。实现脚本暂停执行功能时调用BFO的内置SDK需要传入该参数。

返回类型为dict或None。当界面定义了输出参数时,用户想要将脚本运行结果赋值给其输出参数时,需要保证其模型相同。

引用脚本重写BFOPythonAPI类的execute方法,示例如下:

from typing import Union
class TestBFOPythonAPI(BFOPythonAPI):
    def execute(self, input: dict, context: dict) -> Union[dict, None]:
        return{'b': input['a']}

业务脚本支持多种数据入库方式,可根据使用场景自行选择,各入库方式的说明如表2所示。

表 2 入库方式说明
在这里插入图片描述

须知:
全量同步过程中存量数据会被覆盖,请谨慎使用。

业务脚本当前仅支持增量同步的入库方式,即采集数据时仅将新增数据和修改数据同步入库,相关代码为notify_data(data)。

业务脚本所需要的数据模型请参考附录

🌈2.3.6.2 开发示例

以采集三方系统设备信息为例,基于基本SDK中模板开发的业务脚本。

import logging
from typing import Union
from bfo import BFOPythonAPI
from bfo.bfo_instance_oper import check_interrupt
from third_system_common.util.odrs.process.update_process import report_total
from third_system_common.util.odrs.save.notify_data import notify_data
from third_system_common.util.wrapper.exception_wrapper import exception_handler
from third_system_common.util.wrapper.setting_wrapper import setting
from third_system_common.util.constants import error_code
from third_system_common.util.exception.base_exception import StopException
class TestBFOPythonAPI(BFOPythonAPI): 
    @setting()    //@setting()支持设置数据校验策略,validate="jump"表示遇到数据校验错误跳过并记录到采集详情页中,validate="throws"表示遇到错误直接返回报错,程序结束。默认不设置值表示遇到错误跳过。
    @exception_handler()  //@exception_handler()表示记录脚本运行期间的错误到采集详情页中,同时报错,程序结束
    def execute(self, input: dict, context: dict) -> Union[dict, None]:    //新建类必须继承BFOPythonAPI,重写execute方法,为固定格式。
        system_name = input['systemName']     //获取脚本入参数集,对应界面脚本输入参数。
        url = input['url']
        proxy_client = ProxyClient(system_name=system_name, request_url=url, request_method=RequestMethod.GET)          //获取客户三方系统数据,新建一个三方系统连接对象,具体源码参考基本SDK。
        data = []
        is_last_page = False               //是否查询到最后一页 
        pageNum = 1                        
        pageSize = 100                     //分页查询数据,例如从第1页开始,每页取100条数据为例。
        while not is_last_page:
            check_interrupt(context)  //采集过程中,用户在Web页面单击“立即终止”后,停止采集。
            request_query_param = {
                "pageNum": pageNum,
                "pageSize": pageSize
            }
            response = proxy_client.proxy_query_data(
                request_query_param=request_query_param)  // 请求客户三方系统查询设备信息接口的url,携带分页参数。
            if len(response['data']) > 0:
  // 获取到数据,将数据放入data对象中,pageNum加1,继续查询下一页,否则认为查到最后一页了,查询结束。
                data.extend(response['data'])
                pageNum += 1
            else:
                is_last_page = True
        report_total(len(data))   //上报应采数据总数
        devs = []  // 数据转换流程,将三方系统的设备数据转换成网络数字地图设备模型。
        for dev in data:  
            check_interrupt(context)  //采集过程中,用户在Web页面单击“立即终止”后,停止采集。
            ne = Equipment()  // 新建设备模型对象,具体源码参考基本SDK的entity文件夹。
            ne.name = dev["nename"]
            ne.ip = dev["neip"]
            ne.mac = dev["nemac"]
            ne.version = dev["version"]
            ne.product_name = dev["netype"]
            ne.classification = device_type.get(dev["necategory"])
            ne.manufacturer = dev["nevendorname"]
            devs.append(ne)
        notify_data(devs,proxy_client.systemId,True)  // 增量同步入库。
        return None

以采集三方系统设备配置文件为例,基于基本SDK+sftp客户端SDK中的模板开发的业务脚本。

import logging
from typing import Union
from bfo import BFOPythonAPI
from third_system_sftp.sftp_util import SftpUtil
from third_system_common.util.wrapper.exception_wrapper import exception_handler
from third_system_common.util.wrapper.setting_wrapper import setting
def get_current_date():
    import time  // 获取当前日期,格式为:yyyyMMdd。
    now = int(time.time())
    timeStruct = time.localtime(now)
    strTime = time.strftime("%Y%m%d", timeStruct)
    return strTime
class TestBFOPythonAPI(BFOPythonAPI):
    @setting()    //@setting()支持设置数据校验策略,validate="jump"表示遇到数据校验错误跳过并记录到采集详情页中,validate="throws"表示遇到错误直接返回报错,程序结束。默认不设置值表示遇到错误跳过。
    @exception_handler()  //@exception_handler()表示记录脚本运行期间的错误到采集详情页中,同时报错,程序结束
    def execute(self, input: dict, context: dict) -> Union[dict, None]:  // 新建类必须继承BFOPythonAPI,重写execute方法,为固定格式。
        host = input['host']  // 获取脚本入参数集,对应界面脚本输入参数。Sftp下载必要参数:服务器IP、端口、用户名和密码。
        port = input['port']
        username = input['username']
        password = input['password']
        remoteDir = '/' + get_current_date()  // 定义远程文件目录,客户实际目录可能随日期变化,每次执行实时生成目录。
        sftp = SftpUtil(host=host, port=port, username=username, password=password,
                        remoteDir=remoteDir)  // 初始化SFTP客户端并建立连接。
        sftp.download_dir()
        sftp.upload_hofs(context)  // 如果是下载设备配置,调用此方法,上传平台,提供给页面查看。
        sftp.clear_dir() // 下载的文件使用完毕之后,请务必调用此方法及时清理临时文件,否则可能因磁盘空间占用无法释放,最终导致服务不可用。因未清理而产生的风险,由客户自行处置并承担后果。
        return None

以采集三方系统设备信息为例,基于基本SDK+Kafka客户端SDK中模板开发的业务脚本。

from typing import Union
from bfo import BFOPythonAPI
from kafka import KafkaConsumer
from third_system_common.util.wrapper.exception_wrapper import exception_handler
from third_system_common.util.wrapper.setting_wrapper import setting
def callback(msg, context):  // 定义回调方法消费数据
    value = json.loads(msg)  //按需转换模型及数据入库,参考[•以采集三方系统设备信息为例,基于基本SDK中模...](#zh-cn_topic_0000001445363196_li13650111514469)。
    ...
class TestBFOPythonAPI(BFOPythonAPI):
    @setting()    //@setting()支持设置数据校验策略,validate="jump"表示遇到数据校验错误跳过并记录到采集详情页中,validate="throws"表示遇到错误直接返回报错,程序结束。默认不设置值表示遇到错误跳过。
    @exception_handler()  //@exception_handler()表示记录脚本运行期间的错误到采集详情页中,同时报错,程序结束。
    def execute(self, input: dict, context: dict) -> Union[dict, None]:
        topic = input['topic']    //获取脚本入参数集,对应界面脚本输入参数。kafka必要参数:topic、bootstrapServers、groupId(建议新增消费组)。
        bootstrap_servers = input['bootstrapServers']
        group_id = input['group_id']
        consumer = Consumer(topic=topic, bootstrap_servers=bootstrap_servers, group_id=group_id) //若涉及安全认证配置,请参考python-kafka三方包的API。
        consumer.consume(callback, context) 
        return None

🦋2.4 客户价值

华为超融合数据中心网络数字地图解决方案为客户打通应用和网络的联系,从应用直接映射到网络,大大缩短应用互访的网络中断类问题定位时间,为客户带来了以下价值:

  • 查看应用互访路径:从应用直接映射到网络,3步查看应用互访路径。

  • 应用部署的服务器集群全景:呈现应用部署的全部服务器集群,以应用视角查看及所有业务单元。

  • 应用部署的网络拓扑全景:通过关联应用部署的业务单元信息和物理拓扑,还原该应用的物理全景图。

🔎3.路径导航

🦋3.1 业务挑战

☀️3.1.1 客户简介

某银行股份有限公司是全国性的股份制商业银行,在全国大部分省市设立了分支机构,实现了对长三角、环渤海、珠三角及海西地区和部分中西部地区的有效覆盖,是公司的重要客户。

☀️3.1.2 客户痛点

🌈3.1.2.1 不感知网络路径

客户缺少还原两个IP地址之间的完整网络路径的能力,包括网络路径及网络路径的状态(如路由是否中断、ACL阻断、端口Down等),对于定界到的网络问题,难以快速定位路径上面的流量是否拥塞、是否存在丢包,运维人员需要逐台ping设备,查看路由表等人工操作来定位和还原设备路径,问题定位效率低、定位时间长,难以辅助用户快速定位路径不可达的故障点及故障原因。

🦋3.2 解决方案

对于客户痛点,华为超融合数据中心网络数字地图解决方案基于网络资源、计算资源、应用服务资源、最终用户等数据,为客户提供“全网一图呈现”、“拓扑还原”、“应用网络互视”和“路径一键导航”等功能,减少问题定位时间,提高运维人员运维效率。

☀️3.2.1 路径一键导航

华为超融合数据中心网络数字地图解决方案基于网络仿真算法,提供还原两个IP地址之间的完整网络路径的能力,如:设备与外部网络之间的路径、两台设备之间的路径、终端IP(物理机、虚拟机、容器、VTEP IP)之间的网络路径,同时展示网络路径的状态(如路由是否中断、ACL阻断、端口Down等),辅助用户快速定位路径不可达的故障点及故障原因。

在网络数字地图输入A、B两个地址,系统中可以一键展示A到B中间经过的所有的路径,包括网络设备、安全设备、负载均衡等等。同时,还可以看到路径上面的流量是否拥塞、是否存在丢包。在应用部门报障时,可以快速进行问题定界。

图 1 :路径一键导航
在这里插入图片描述

☀️3.2.2 路径一键导航-数据模型

“路径一键导航”需要完成全网的拓扑还原,形成全网拓扑。数据模型请参考全网一图呈现数据模型拓扑还原数据模型

🦋3.3 开发指南

☀️3.3.1 采集流程

在这里插入图片描述

☀️3.3.2 开发业务脚本

业务脚本是Python格式的脚本文件,在设计采集流程时导入MDC,执行采集时MDC会根据脚本中的代码进行采集。

须知:

  • 本系统为开放可编程系统,界面支持自定义逻辑输入及显示查看;用户在使用本系统进行设计时,应避免在界面输入敏感信息,如密码等,以防信息泄露。
  • 开发业务脚本的操作人员需要具备Python、RESTful、JSON基础。
  • 开发脚本的过程中,应避免打印包含个人数据、认证口令、绝对路径等敏感信息的日志,防止造成敏感信息泄露。

☀️3.3.3 下载SDK

数字地图预置了部分SDK,SDK中包含了多种类型数据的采集用例模板,供用户下载开发。

☀️3.3.4 预置SDK介绍

已预置的SDK的功能介绍如表1所示。

表 1 SDK功能介绍
在这里插入图片描述

☀️3.3.5 下载SDK

  1. 在“数字地图“APP的菜单中选择“数据采集 > 三方系统采集 > 下载python SDK“。

  2. 选择需要下载的SDK,单击“点击下载“。
    在这里插入图片描述

  3. 下载的SDK为.zip格式的压缩包,需解压后再使用。

☀️3.3.6 业务脚本开发示例

🌈2.3.6.1 背景信息

业务脚本需要继承内置SDK的BFOPythonAPI类,并且放置在根目录下。引用脚本中的业务逻辑需要重写BFOPythonAPI类的execute方法。

内置SDK中BFOPythonAPI类的方法定义如下:

from typing import Union
class BFOPythonAPI(object):
    def execute(self, input: dict, context: dict) -> Union[dict, None]:
        raise NotImplemented("Function execute not implemented.")

input:脚本入参数集,类型为dict。比如:界面定义脚本输入参数a,通过input[‘a’]可获取其值。

context:上下文参数。实现脚本暂停执行功能时调用BFO的内置SDK需要传入该参数。

返回类型为dict或None。当界面定义了输出参数时,用户想要将脚本运行结果赋值给其输出参数时,需要保证其模型相同。

引用脚本重写BFOPythonAPI类的execute方法,示例如下:

from typing import Union
class TestBFOPythonAPI(BFOPythonAPI):
    def execute(self, input: dict, context: dict) -> Union[dict, None]:
        return{'b': input['a']}

业务脚本支持多种数据入库方式,可根据使用场景自行选择,各入库方式的说明如表2所示。

表 2 入库方式说明
在这里插入图片描述

须知:
全量同步过程中存量数据会被覆盖,请谨慎使用。

业务脚本当前仅支持增量同步的入库方式,即采集数据时仅将新增数据和修改数据同步入库,相关代码为notify_data(data)。

业务脚本所需要的数据模型请参考附录

🌈2.3.6.2 开发示例

以采集三方系统设备信息为例,基于基本SDK中模板开发的业务脚本。

import logging
from typing import Union
from bfo import BFOPythonAPI
from bfo.bfo_instance_oper import check_interrupt
from third_system_common.util.odrs.process.update_process import report_total
from third_system_common.util.odrs.save.notify_data import notify_data
from third_system_common.util.wrapper.exception_wrapper import exception_handler
from third_system_common.util.wrapper.setting_wrapper import setting
from third_system_common.util.constants import error_code
from third_system_common.util.exception.base_exception import StopException
class TestBFOPythonAPI(BFOPythonAPI): 
    @setting()    //@setting()支持设置数据校验策略,validate="jump"表示遇到数据校验错误跳过并记录到采集详情页中,validate="throws"表示遇到错误直接返回报错,程序结束。默认不设置值表示遇到错误跳过。
    @exception_handler()  //@exception_handler()表示记录脚本运行期间的错误到采集详情页中,同时报错,程序结束
    def execute(self, input: dict, context: dict) -> Union[dict, None]:    //新建类必须继承BFOPythonAPI,重写execute方法,为固定格式。
        system_name = input['systemName']     //获取脚本入参数集,对应界面脚本输入参数。
        url = input['url']
        proxy_client = ProxyClient(system_name=system_name, request_url=url, request_method=RequestMethod.GET)          //获取客户三方系统数据,新建一个三方系统连接对象,具体源码参考基本SDK。
        data = []
        is_last_page = False               //是否查询到最后一页 
        pageNum = 1                        
        pageSize = 100                     //分页查询数据,例如从第1页开始,每页取100条数据为例。
        while not is_last_page:
            check_interrupt(context)  //采集过程中,用户在Web页面单击“立即终止”后,停止采集。
            request_query_param = {
                "pageNum": pageNum,
                "pageSize": pageSize
            }
            response = proxy_client.proxy_query_data(
                request_query_param=request_query_param)  // 请求客户三方系统查询设备信息接口的url,携带分页参数。
            if len(response['data']) > 0:
  // 获取到数据,将数据放入data对象中,pageNum加1,继续查询下一页,否则认为查到最后一页了,查询结束。
                data.extend(response['data'])
                pageNum += 1
            else:
                is_last_page = True
        report_total(len(data))   //上报应采数据总数
        devs = []  // 数据转换流程,将三方系统的设备数据转换成网络数字地图设备模型。
        for dev in data:  
            check_interrupt(context)  //采集过程中,用户在Web页面单击“立即终止”后,停止采集。
            ne = Equipment()  // 新建设备模型对象,具体源码参考基本SDK的entity文件夹。
            ne.name = dev["nename"]
            ne.ip = dev["neip"]
            ne.mac = dev["nemac"]
            ne.version = dev["version"]
            ne.product_name = dev["netype"]
            ne.classification = device_type.get(dev["necategory"])
            ne.manufacturer = dev["nevendorname"]
            devs.append(ne)
        notify_data(devs,proxy_client.systemId,True)  // 增量同步入库。
        return None

以采集三方系统设备配置文件为例,基于基本SDK+sftp客户端SDK中的模板开发的业务脚本。

import logging
from typing import Union
from bfo import BFOPythonAPI
from third_system_sftp.sftp_util import SftpUtil
from third_system_common.util.wrapper.exception_wrapper import exception_handler
from third_system_common.util.wrapper.setting_wrapper import setting
def get_current_date():
    import time  // 获取当前日期,格式为:yyyyMMdd。
    now = int(time.time())
    timeStruct = time.localtime(now)
    strTime = time.strftime("%Y%m%d", timeStruct)
    return strTime
class TestBFOPythonAPI(BFOPythonAPI):
    @setting()    //@setting()支持设置数据校验策略,validate="jump"表示遇到数据校验错误跳过并记录到采集详情页中,validate="throws"表示遇到错误直接返回报错,程序结束。默认不设置值表示遇到错误跳过。
    @exception_handler()  //@exception_handler()表示记录脚本运行期间的错误到采集详情页中,同时报错,程序结束
    def execute(self, input: dict, context: dict) -> Union[dict, None]:  // 新建类必须继承BFOPythonAPI,重写execute方法,为固定格式。
        host = input['host']  // 获取脚本入参数集,对应界面脚本输入参数。Sftp下载必要参数:服务器IP、端口、用户名和密码。
        port = input['port']
        username = input['username']
        password = input['password']
        remoteDir = '/' + get_current_date()  // 定义远程文件目录,客户实际目录可能随日期变化,每次执行实时生成目录。
        sftp = SftpUtil(host=host, port=port, username=username, password=password,
                        remoteDir=remoteDir)  // 初始化SFTP客户端并建立连接。
        sftp.download_dir()
        sftp.upload_hofs(context)  // 如果是下载设备配置,调用此方法,上传平台,提供给页面查看。
        sftp.clear_dir() // 下载的文件使用完毕之后,请务必调用此方法及时清理临时文件,否则可能因磁盘空间占用无法释放,最终导致服务不可用。因未清理而产生的风险,由客户自行处置并承担后果。
        return None

以采集三方系统设备信息为例,基于基本SDK+Kafka客户端SDK中模板开发的业务脚本。

from typing import Union
from bfo import BFOPythonAPI
from kafka import KafkaConsumer
from third_system_common.util.wrapper.exception_wrapper import exception_handler
from third_system_common.util.wrapper.setting_wrapper import setting
def callback(msg, context):  // 定义回调方法消费数据
    value = json.loads(msg)  //按需转换模型及数据入库,参考[•以采集三方系统设备信息为例,基于基本SDK中模...](#zh-cn_topic_0000001445363196_li13650111514469)。
    ...
class TestBFOPythonAPI(BFOPythonAPI):
    @setting()    //@setting()支持设置数据校验策略,validate="jump"表示遇到数据校验错误跳过并记录到采集详情页中,validate="throws"表示遇到错误直接返回报错,程序结束。默认不设置值表示遇到错误跳过。
    @exception_handler()  //@exception_handler()表示记录脚本运行期间的错误到采集详情页中,同时报错,程序结束。
    def execute(self, input: dict, context: dict) -> Union[dict, None]:
        topic = input['topic']    //获取脚本入参数集,对应界面脚本输入参数。kafka必要参数:topic、bootstrapServers、groupId(建议新增消费组)。
        bootstrap_servers = input['bootstrapServers']
        group_id = input['group_id']
        consumer = Consumer(topic=topic, bootstrap_servers=bootstrap_servers, group_id=group_id) //若涉及安全认证配置,请参考python-kafka三方包的API。
        consumer.consume(callback, context) 
        return None

🦋3.4 客户价值

华为超融合数据中心网络数字地图解决方案为客户直观呈现网络流真实路径,快速识别问题点,为客户带来了以下价值:

  • 支持同一数据中心内网络路径查询:包括两个IP之间(物理机、虚拟机、容器、VTEP IP)、两个设备之间、设备与外部网络之间的路径

  • 支持VM端到端路径导航:服务器内虚拟与物理网络协同,VM端到端路径一键导航,实现业务异常秒级定位

🔎4.智能搜索定位

🦋4.1 业务挑战

☀️4.1.1 客户简介

某银行股份有限公司是全国性的股份制商业银行,在全国大部分省市设立了分支机构,实现了对长三角、环渤海、珠三角及海西地区和部分中西部地区的有效覆盖,是公司的重要客户。

☀️4.1.2 客户痛点

🌈4.1.2.1 网络搜索定位难

客户有多个数据中心,物理设备规模超过上千台,遇到设备或者服务器出现故障,运维人员难以快速搜索设备、服务器,定位到设备和服务器所在的拓扑位置,查找效率低,严重影响问题定位与解决。

🦋4.2 解决方案

对于客户痛点,华为超融合数据中心网络数字地图解决方案基于网络资源、计算资源、应用服务资源、最终用户等数据,为客户提供“全网一图呈现”、“拓扑还原”、“应用网络互视”和“路径一键导航”等功能,减少问题定位时间,提高运维人员运维效率。

☀️4.2.1 智能搜索定位

华为超融合数据中心网络数字地图解决方案基于网络和设备数据,提供对资产网络建模和定位的能力,如:模糊查询设备、展示设备的信息、定位交换机在网络拓扑中的位置、定位终端IP(物理机、虚拟机、容器、VTEP IP)在拓扑中的位置,同时展示设备的使用情况和配置信息(如VLANIF数量,互联接口数量和VBDIF数量等),辅助用户快速定位资产网络位置,从根本上提升查找效率。

在数字地图输入想要查找的设备名称或IP地址,系统中可以一键展示所有模糊搜索到的资产,包括网络设备、安全设备、负载均衡等等。同时,还可以定位到拓扑中的位置。

图 1 :基于名称和IP地址的模糊搜索
在这里插入图片描述
图 2 :定位到设备
在这里插入图片描述
图 3 :定位到服务器
在这里插入图片描述

☀️4.2.2 智能搜索定位-数据模型

“智能搜索定位”需要完成全网的拓扑还原,形成全网拓扑。数据模型请参考全网一图呈现数据模型和拓扑还原数据模型。

🦋4.3 开发指南

☀️4.3.1 采集流程

在这里插入图片描述

☀️4.3.2 开发业务脚本

业务脚本是Python格式的脚本文件,在设计采集流程时导入MDC,执行采集时MDC会根据脚本中的代码进行采集。

须知:

  • 本系统为开放可编程系统,界面支持自定义逻辑输入及显示查看;用户在使用本系统进行设计时,应避免在界面输入敏感信息,如密码等,以防信息泄露。

  • 开发业务脚本的操作人员需要具备Python、RESTful、JSON基础。

  • 开发脚本的过程中,应避免打印包含个人数据、认证口令、绝对路径等敏感信息的日志,防止造成敏感信息泄露。

☀️4.3.3 下载SDK

数字地图预置了部分SDK,SDK中包含了多种类型数据的采集用例模板,供用户下载开发。

☀️4.3.4 预置SDK介绍

已预置的SDK的功能介绍如表1所示。

表 1 SDK功能介绍
在这里插入图片描述

☀️4.3.5 下载SDK

  1. 在“数字地图“APP的菜单中选择“数据采集 > 三方系统采集 > 下载python SDK“。

  2. 选择需要下载的SDK,单击“点击下载“。
    在这里插入图片描述

  3. 下载的SDK为.zip格式的压缩包,需解压后再使用。

☀️4.3.6 业务脚本开发示例

🌈4.3.6.1 背景信息

业务脚本需要继承内置SDK的BFOPythonAPI类,并且放置在根目录下。引用脚本中的业务逻辑需要重写BFOPythonAPI类的execute方法。

内置SDK中BFOPythonAPI类的方法定义如下:

from typing import Union
class BFOPythonAPI(object):
    def execute(self, input: dict, context: dict) -> Union[dict, None]:
        raise NotImplemented("Function execute not implemented.")

input:脚本入参数集,类型为dict。比如:界面定义脚本输入参数a,通过input[‘a’]可获取其值。

context:上下文参数。实现脚本暂停执行功能时调用BFO的内置SDK需要传入该参数。

返回类型为dict或None。当界面定义了输出参数时,用户想要将脚本运行结果赋值给其输出参数时,需要保证其模型相同。

引用脚本重写BFOPythonAPI类的execute方法,示例如下:

from typing import Union
class TestBFOPythonAPI(BFOPythonAPI):
    def execute(self, input: dict, context: dict) -> Union[dict, None]:
        return{'b': input['a']}

业务脚本支持多种数据入库方式,可根据使用场景自行选择,各入库方式的说明如表2所示。

表 2 入库方式说明
在这里插入图片描述

须知:
全量同步过程中存量数据会被覆盖,请谨慎使用。

业务脚本当前仅支持增量同步的入库方式,即采集数据时仅将新增数据和修改数据同步入库,相关代码为notify_data(data)。

业务脚本所需要的数据模型请参考附录

🌈4.3.6.2 开发示例

以采集三方系统设备信息为例,基于基本SDK中模板开发的业务脚本。

import logging
from typing import Union
from bfo import BFOPythonAPI
from bfo.bfo_instance_oper import check_interrupt
from third_system_common.util.odrs.process.update_process import report_total
from third_system_common.util.odrs.save.notify_data import notify_data
from third_system_common.util.wrapper.exception_wrapper import exception_handler
from third_system_common.util.wrapper.setting_wrapper import setting
from third_system_common.util.constants import error_code
from third_system_common.util.exception.base_exception import StopException
class TestBFOPythonAPI(BFOPythonAPI): 
    @setting()    //@setting()支持设置数据校验策略,validate="jump"表示遇到数据校验错误跳过并记录到采集详情页中,validate="throws"表示遇到错误直接返回报错,程序结束。默认不设置值表示遇到错误跳过。
    @exception_handler()  //@exception_handler()表示记录脚本运行期间的错误到采集详情页中,同时报错,程序结束
    def execute(self, input: dict, context: dict) -> Union[dict, None]:    //新建类必须继承BFOPythonAPI,重写execute方法,为固定格式。
        system_name = input['systemName']     //获取脚本入参数集,对应界面脚本输入参数。
        url = input['url']
        proxy_client = ProxyClient(system_name=system_name, request_url=url, request_method=RequestMethod.GET)          //获取客户三方系统数据,新建一个三方系统连接对象,具体源码参考基本SDK。
        data = []
        is_last_page = False               //是否查询到最后一页 
        pageNum = 1                        
        pageSize = 100                     //分页查询数据,例如从第1页开始,每页取100条数据为例。
        while not is_last_page:
            check_interrupt(context)  //采集过程中,用户在Web页面单击“立即终止”后,停止采集。
            request_query_param = {
                "pageNum": pageNum,
                "pageSize": pageSize
            }
            response = proxy_client.proxy_query_data(
                request_query_param=request_query_param)  // 请求客户三方系统查询设备信息接口的url,携带分页参数。
            if len(response['data']) > 0:
  // 获取到数据,将数据放入data对象中,pageNum加1,继续查询下一页,否则认为查到最后一页了,查询结束。
                data.extend(response['data'])
                pageNum += 1
            else:
                is_last_page = True
        report_total(len(data))   //上报应采数据总数
        devs = []  // 数据转换流程,将三方系统的设备数据转换成数字地图设备模型。
        for dev in data:  
            check_interrupt(context)  //采集过程中,用户在Web页面单击“立即终止”后,停止采集。
            ne = Equipment()  // 新建设备模型对象,具体源码参考基本SDK的entity文件夹。
            ne.name = dev["nename"]
            ne.ip = dev["neip"]
            ne.mac = dev["nemac"]
            ne.version = dev["version"]
            ne.product_name = dev["netype"]
            ne.classification = device_type.get(dev["necategory"])
            ne.manufacturer = dev["nevendorname"]
            devs.append(ne)
        notify_data(devs,proxy_client.systemId,True)  // 增量同步入库。
        return None

以采集三方系统设备配置文件为例,基于基本SDK+sftp客户端SDK中的模板开发的业务脚本。

import logging
from typing import Union
from bfo import BFOPythonAPI
from third_system_sftp.sftp_util import SftpUtil
from third_system_common.util.wrapper.exception_wrapper import exception_handler
from third_system_common.util.wrapper.setting_wrapper import setting
def get_current_date():
    import time  // 获取当前日期,格式为:yyyyMMdd。
    now = int(time.time())
    timeStruct = time.localtime(now)
    strTime = time.strftime("%Y%m%d", timeStruct)
    return strTime
class TestBFOPythonAPI(BFOPythonAPI):
    @setting()    //@setting()支持设置数据校验策略,validate="jump"表示遇到数据校验错误跳过并记录到采集详情页中,validate="throws"表示遇到错误直接返回报错,程序结束。默认不设置值表示遇到错误跳过。
    @exception_handler()  //@exception_handler()表示记录脚本运行期间的错误到采集详情页中,同时报错,程序结束
    def execute(self, input: dict, context: dict) -> Union[dict, None]:  // 新建类必须继承BFOPythonAPI,重写execute方法,为固定格式。
        host = input['host']  // 获取脚本入参数集,对应界面脚本输入参数。Sftp下载必要参数:服务器IP、端口、用户名和密码。
        port = input['port']
        username = input['username']
        password = input['password']
        remoteDir = '/' + get_current_date()  // 定义远程文件目录,客户实际目录可能随日期变化,每次执行实时生成目录。
        sftp = SftpUtil(host=host, port=port, username=username, password=password,
                        remoteDir=remoteDir)  // 初始化SFTP客户端并建立连接。
        sftp.download_dir()
        sftp.upload_hofs(context)  // 如果是下载设备配置,调用此方法,上传平台,提供给页面查看。
        sftp.clear_dir() // 下载的文件使用完毕之后,请务必调用此方法及时清理临时文件,否则可能因磁盘空间占用无法释放,最终导致服务不可用。因未清理而产生的风险,由客户自行处置并承担后果。
        return None

以采集三方系统设备信息为例,基于基本SDK+Kafka客户端SDK中模板开发的业务脚本。

from typing import Union
from bfo import BFOPythonAPI
from kafka import KafkaConsumer
from third_system_common.util.wrapper.exception_wrapper import exception_handler
from third_system_common.util.wrapper.setting_wrapper import setting
def callback(msg, context):  // 定义回调方法消费数据
    value = json.loads(msg)  //按需转换模型及数据入库,参考[•以采集三方系统设备信息为例,基于基本SDK中模...](#zh-cn_topic_0000001445363196_li13650111514469)。
    ...
class TestBFOPythonAPI(BFOPythonAPI):
    @setting()    //@setting()支持设置数据校验策略,validate="jump"表示遇到数据校验错误跳过并记录到采集详情页中,validate="throws"表示遇到错误直接返回报错,程序结束。默认不设置值表示遇到错误跳过。
    @exception_handler()  //@exception_handler()表示记录脚本运行期间的错误到采集详情页中,同时报错,程序结束。
    def execute(self, input: dict, context: dict) -> Union[dict, None]:
        topic = input['topic']    //获取脚本入参数集,对应界面脚本输入参数。kafka必要参数:topic、bootstrapServers、groupId(建议新增消费组)。
        bootstrap_servers = input['bootstrapServers']
        group_id = input['group_id']
        consumer = Consumer(topic=topic, bootstrap_servers=bootstrap_servers, group_id=group_id) //若涉及安全认证配置,请参考python-kafka三方包的API。
        consumer.consume(callback, context) 
        return None

🦋4.4 客户价值

华为超融合数据中心网络数字地图解决方案为客户提供快速定位资产位置的能力;根据网络设备的名称和IP,基于网络拓扑还原算法,使客户快速定位网络设备在整体网络拓扑中的位置,为运维人员查找设备,定位问题提供了帮助。

🚀三、Runbook+AOC五大典型场景及集成开发

Runbook+AOC五大典型场景及集成开发主要以互联网业务开通应用网络互视场景为案例进行讲解。

其他案例可以参考:https://devzone.huawei.com/cn/enterprise/cloudfabric/customerstory.html

在这里插入图片描述

🔎1.互联网业务开通

🦋1.1 场景说明

本案例组网如图1所示。用户网络分为内部网络和外部网络,内外部区域之间部署Hillstone防火墙,用于对内网服务器进行安全防护。用户希望使用iMaster NCE-Fabric纳管第三方防火墙后,通过Runbook功能向设备发放防火墙策略,将内网地址转换成合法的公网地址。

本案例控制器版本为iMaster NCE-Fabric V100R022C00SPC100,其他版本需自行适配。

图 1 管理三方防火墙组网图
在这里插入图片描述

🦋1.2 配置分析

为实现上述业务,用户最终需要向Hillstone防火墙发放如下配置:

  1. 配置公网地址到内网地址映射的DNAT规则
  2. 配置内网地址到公网地址映射的SNAT规则
  3. 配置安全策略放行

需要发放至Hillstone防火墙的目标配置如下。

ip vrouter trust-vr
snatrule from 110.0.0.9/32 to 200.0.0.1/32 service any trans-to 200.0.0.9/32 mode static
ip vrouter trust-vr
dnatrule from 200.0.0.1/32 to 200.0.0.9/32 service any trans-to 110.0.0.9/32
rule id 1
    action permit
    service any
    src-zone Any
    dst-zone Any
    src-addr any
    dst-addr any

🦋1.3 业务流程

图 1 iMaster NCE-Fabric纳管并配置Hillstone防火墙流程图
在这里插入图片描述
表 1 使用统一网元模型进行Runbook业务流编排流程
在这里插入图片描述

🦋1.4 操作步骤

实际操作步骤可参考官方文档:https://devzone.huawei.com/cn/enterprise/cloudfabric/networkOpen.html?mdName=%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A4.md
在这里插入图片描述

🔎2.服务器扩容

🦋2.1 场景说明

用户需要修改接入CE交换机设备的物理接口,设置允许放通的VLAN和接口模式等,使服务器接入网络。本案例组网如图1所示。用户希望使用iMaster NCE-Fabric,通过Runbook功能向CE设备下发端口修改策略,将第二个服务器接入网络以完成服务器扩容。

本案例控制器版本为iMaster NCE-Fabric V100R022C10SPC100,其他版本需自行适配。

图 1 服务器扩容

在这里插入图片描述

🦋2.2 配置分析

为实现上述业务,用户最终需要向CE交换机发放如下配置:

  1. 进入端口10GE1/0/11

  2. 修改端口类型并将端口加入VLAN1000

interface 10GE 1/0/11
port link-type access
port default vlan 1000

🦋2.3 编排并发放业务

☀️2.3.1 前提条件

  • iMaster NCE-Fabric已纳管CE交换机设备,且设备状态正常。

  • 已完成iMaster NCE-Fabric和设备间的南向数据同步和业务还原。

  • 已在iMaster NCE-Fabric中导入并发布动作包。

  • 已有VLAN1000,扩容服务器连接到交换机10GE1/0/11。

在这里插入图片描述

☀️2.3.2 编排逻辑

根据配置分析中的待发放配置,可以将任务分解为一个步骤,编排逻辑如表1所示。

表 1 编排逻辑及使用模型
在这里插入图片描述

☀️2.3.3 数据规划

编排工作流使用到的具体数据请参见下表:

在这里插入图片描述

☀️2.3.4 操作步骤

实际操作步骤可参考官方文档:https://devzone.huawei.com/cn/enterprise/cloudfabric/serverScale.html?mdName=%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A4.md
在这里插入图片描述

🚀总结

华为云之超融合数据中心生态方案中的DCN网络数字地图是一项创新技术,旨在提供更加智能化和可视化的数据中心网络管理。以下是该方案的几个关键点的总结:

可视化管理: DCN网络数字地图通过直观的图形界面展示整个数据中心的网络结构,包括设备、连接和流量情况。这种可视化管理使得网络管理员可以更容易地理解网络状态,快速定位问题。

实时监控: 该方案支持实时监控网络性能,包括带宽利用率、延迟和丢包率等关键指标。通过实时数据,管理员可以及时发现和解决网络问题,确保数据中心的稳定运行。

智能优化: DCN网络数字地图结合人工智能和机器学习技术,能够根据网络流量和应用需求自动调整网络配置,优化网络性能。这种智能优化有助于提高网络效率,减少手动干预。

故障诊断与定位: 当网络出现问题时,该方案能够快速诊断故障原因,并精准定位问题所在,缩短故障恢复时间。这对于保证数据中心的高可用性至关重要。

安全管理: DCN网络数字地图还提供了全面的网络安全管理功能,包括对网络流量的监控和分析,以及对异常行为的检测和预警。这有助于及时发现和防御网络安全威胁。

易于扩展: 随着数据中心的不断扩展,该方案支持灵活地添加新的网络设备和服务,无缝集成到现有的网络架构中,保证网络的可扩展性。

华为云之超融合数据中心生态方案中的DCN网络数字地图为数据中心网络管理提供了一个更加智能化、可视化和安全的解决方案,有助于提高网络性能和可靠性,支持数据中心的高效运营。


本文整理自华为云社区【内容共创】活动第26期。

查看活动详情:https://bbs.huaweicloud.com/blogs/424150

相关任务详情:任务2.超融合数据中心生态方案分享 基于网络数字地图&Runbook+AOC

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。