跳到主要内容

常用使用场景

场景一 如何进行主机监控告警配置和处理

场景介绍

某公司,现已存在Zabbix、动环、网络监控及阿里云监控系统,存在以下问题:告警信息查看系统过多,信息不同步,告警分析难度大,通知方式单一等问题。使用“WeOps-监控告警”可以对多类对象进行监控,提供多种方式的告警,全面展示该告警的相关信息,以便进行处理。

场景实现

Step1:监控采集-安装Agent

如下图所示,选择“操作系统-主机”,进入主机Agent安装界面,点击“安装Agent”

在安装的界面,选择该主机归属的业务、云区域以及接入点。随后在安装信息输入该纳管主机的IP地址,登录账号和密码等核心配置。输入完成之后点击[安装]按钮即可将agent部署至该主机。

Step2:监控策略配置

进入WeOps的管理中心的监控管理,找到监控策略。

  • 如下图所示,进入新建监控模板配置界面

  • 如下图所示,填写监控“模板名称”、“监控对象”。

  • 如下图所示,点击蓝色字体【添加监控项配置】即会弹出对应界面。主机监控项分为“指标”和“事件”两类。指标主要为常见的CPU、内存、磁盘、进程等监控指标。而事件则是指Agent心跳、Ping可达、主机重启等。

  • 若下图所示,选择监控项为指标类,搜索监控项

  • 选择汇聚方式为平均数,即AVG方式。SUM代表总数,AVG代表平均数,MAX代表最大值,MIN代表最小值,COUNT代表计数/总数。
  • 选择汇聚周期,汇聚周期即采集数据的周期。(注:汇聚1min即是服务端每分钟向Agent采集1次数据。若是汇聚周期设置为5min则表示服务端向Agent每5分钟采集1次数据,此刻的Agent已经采集到了5次数据。之后,并根据汇聚方式将这5个数据进行计算(AVG/MAX/MIN等),计算得出的数值再于检测算法设置的阈值进行比较。)

  • 如下图所示,点击蓝色字体添加检测算法,进行不同监控等级阈值的设置。以下示例采用检测静态阈值触发告警。此外还有高级的阈值检测方式可选择:各种同比/环比策略。

  • 如下图所示,进行“触发条件”、“恢复条件”、“无数据告警”、“监控纬度”以及“监控条件”的设置。

  • 如下图所示,对监控项进行一一添加后再进行其他配置即可完成通用监控项模板。

Step3:告警人员通知配置

  • 如下图,进入通知配置界面,选择对应的用户,点击“配置”按钮,可以进行通知方式的配置,可选“邮件、短信、微信、电话”等形式

Step4:接收告警信息(以邮件为例)

路径:个人邮箱

  • 发生告警时,邮箱接受到告警信息,如下图,包括告警的内容、对象、时间、业务等信息,便于快速感知告警。

Step5:告警详情查看

路径:事件-告警-活动告警

  • 如下图,前往告警的活动告警中,可以找到该条关于CPU内存的告警信息。

  • 如下图,点击告警,可以进入告警的详情页,进行告警信息的查看,通过基础信息、指标视图等信息,可以断定告警发生的对象、时间、影响等,比如该条告警,是蓝鲸应用下一台主机的cpu单核使用率过高,设定的告警值为90%,目前该主机的CPU单核使用率已经达到了94%。

  • 可以通过指标视图和关联拓扑,可以分析告警的影响范围和产生的原因。

Step6:告警分派/认领

路径:事件-告警-活动告警

  • 对于告警的处理,可以进行认领和分派,点击认领按钮,可以对告警进行自行认领,认领的告警项会进入到“我的告警”,状态改变为“手动处理中”待处理完成后,可关闭告警; 点击分派按钮,可以对告警进行指定用户的分派。
  • 这里我们选择自行认领该告警,告警进行手动处理阶段,在故障处理完成后可以自动/手动关闭。

Step7:故障处理

路径:运维工具-脚本工具-查询消耗系统CPU最多的进程

  • 针对上述告警关于CPU单核使用率过高的故障,需要进行故障处理,需要查看该台主机的CPU使用情况,可利用“运维工具-脚本工具-查询消耗系统CPU最多的进程”进行。
  • 点击进入脚本工具的执行页面,选择有故障的主机,填写展示top20的进程

  • 执行完成后,可以在结果界面,查看消耗cpu最多的top20的进行,可进行判断进行处理。

Step8:告警关闭

故障消除后,该条告警将会自动关闭,也可进行手动关闭。


场景二 如何进行应用故障的处理

场景介绍

某公司IT部门内部明文规定,作为业务管理员在收到相关业务的报障后,需要尽快进行问题的排查和处理,保证各应用的正常运行。

场景实现

路径:WeOps-应用

Step1:接收报障

  • 应用管理员接收到同事的报障:今天上午9点左右,蓝鲸环境访问速度过慢,需要紧急修复。

Step2:查看网站视图

  • 登录WeOps,进入应用界面,切换至“蓝鲸”应用。在页面上方的网站监测部分,可以看出在8::0-10:00直接该网站的发生了告警事件,点击可查看该段时间的网站的使用率和响应时长视图,通过视图可以看出,该时间段响应时长过长。

Step3:分析故障产生原因

  • 协助分析1:在应用界面的中部展示与该应用所有相关的告警信息,可点击查看告警列表,查询与该故障前后发生的告警协助分析。

  • 协助分析2:在应用界面的下方展示了该应用下的主机、数据库、其他资源的基本信息,CPU磁盘使用率、磁盘空间使用率、应用内存使用率等信息,可以帮助排查故障出现的原因。

Step4:进行故障处理

根据上述步骤,已经排查出故障出现的原因,同“场景一”可以使用运维工具进行故障的处理。

场景三 如何进行资源的日常检查

场景介绍

某公司IT部门内部明文规定,为了保证业务系统的正常运行,运维每天早上上班后需要对负责的IT运维对象进行整体情况的熟悉,对于出现的问题可以提前预判,避免故障发生。

场景实现

Step1:查看告警情况

路径:WeOps-首页

  • 登录WeOps,进入首页,在首页中可以查看目前出现暂未处理的告警列表,也可以查看自己关注的应用的告警汇总数量,从整体上感知系统的整体状态。

Step2:查看监控状态

路径:监控视图-应用/基础监控/网站监测

  • 进入“应用”界面,从该应用的网站监测、告警情况、实例状态等方面,进行该应用的检查。

  • 进入“基础监控”界面,将IT对象分为主机、数据库、中间件等分类进行不同实例的告警状态、监控状态的检查。

  • 进入“网站监测”界面,对已经加入拨测的网站进行可用率、响应时间等方面的整体检查。

Step3:进行健康扫描

路径:健康扫描-扫描列表

  • 如下图,在健康扫描中,新建扫描任务,填写基础信息、选择内置的扫描包和对应的资料。

  • 任务创建完成后,可执行“立即扫描”,扫描结束后如下图,在该任务下点击“详情按钮”,可以查看各个实例的扫描情况

  • 点击“实例列表”后面的“详情”,可进入到该实例的详情业务,该实例的详情页面展示了实例的健康详情,具体见下图,对于警告/危险的指标予以关注,并进行处理,避免发生故障,影响系统的正常运行。

场景四 如何进行自动化运维(以Windows月度补丁安装为例)

场景介绍

某公司的安全部门要求,Windows服务器必须每个月按照要求进行对应的补丁安装,补丁来源于微软每月发布的月度补丁。

场景实现

Step1:下载/准备补丁文件

前往微软官网,下载对应月度的补丁。

Step2:创建补丁安装任务

路径:自动化运维-补丁安装

点击WeOps自动化运维中的“补丁安装”进行补丁安装操作,点击“创建任务”进行补丁任务的新建。

在任务新建界面,可选择Windows/linux两类操作系统,服务器支持跨业务多选,补丁文件支持本地上传/30天内上传的补丁文件复用,支持选择邮件通知人。

Step3:执行补丁安装

任务创建完成后,可以点击进行“立即执行”/“定时执行”

执行完成后,可以查看执行结果

Step4:服务器重启

路径:运维工具-系统应用-作业平台

补丁安装任务执行完成后,针对需要重启的Windows服务器,可以通过作业平台进行批量服务器重启。

服务器重启完成后,补丁安装完毕。

场景五 如何进行IT资产的管理和维护

场景介绍

某公司原来对于IT资产信息的管理仍使用传统的表格进行人工手动维护,会造成资产记录完整性和及时性无法保证,资产盘点工作繁琐的问题。使用“WeOps-资源记录”模块可以实现资产信息管理自动化,拓扑展示可视化,资产盘点工作高效。

场景实现

Step1:资源纳管

对于应用、主机、数据库、中间件的纳管,可参见“1、资源纳管”的部分

Step2:应用资源信息查看

路径:管理-管理中心-应用列表

  • 如下图,应用列表展示了所有的应用信息,点击“查看”按钮,可以进行该应用的详细信息查看,点击“查看拓扑”可进入到该应用的拓扑界面,进行拓扑的查看。

  • 在应用列表页点击“查看”后,可进入该应用的详情页面,可以查看该应用的拓扑结构、变更记录、主机列表、节点信息。

  • 在应用列表页点击“查看拓扑”后,可进入该应用的拓扑页面,可以查看该应用的拓扑图、以及拓扑图中的各个节点/实例的信息,具体详见下图

Step3:资源信息查看(以主机为例)

路径:资产数据-资源记录-主机

  • 如下图,在资源列表中,可以查看所有主机的列表和信息,关联的数据库实例,可以进行主机资源的导出。

  • 在资源列表中,点击“查看”按钮,跳转到该主机的详情页,详情页展示了主机的详细信息,以列表和拓扑的形式展示了主机的关联信息,以时间轴的形式展示了主机的变更记录。可以通过上述的形式获取主机的相关信息。

场景六 如何利用工单进行AD账号的自动创建

场景介绍

某公司之前AD账号创建需要运维人员接受到需求后,前往AD里面一个个手动创建账号,并把对应的账号密码信息反馈给申请人,可以使用WeOps的IT服务台进行AD账号创建的工单提交并且实行自动化创建。

场景实现

Step1:前提条件介绍

1、WeOps和AD的前期准备

  • WeOps的APPT机器能通AD服务器的636端口,并且装了AD的根证书
  • WeOps中已经纳管所需要的AD服务器,如下图,在WeOps-资产数据-资产记录-AD中,对所需要的AD服务器进行纳管

  • AD服务器的凭据信息已经录入WeOps-凭据管理中,并且关联该AD服务器,并授权给对应需要审核的运维管理员

2、工单流程和自动化流程前期准备

  • 在WeOps-管理-服务台管理导入工单流程

  • 在WeOps后台管理-流程API配置中导入需要的API接口

  • 在自动化流程中导入需要的自动化流程

Step2:对导入的流程进行重新配置

前期准备完成后,需要对流程进行重新配置,具体操作步骤可查看视频查看AD账号创建自动化流程的配置

提单节点:用内置的不用调整

审批节点:AD服务器和AD组这两个字段需要重新选择接口

获取API详情节点:选择对应接口,下面的参数会自动勾选的

自动账号创建节点:选择需要的自动流程,填写参数

Step3:使用工单流程提单,进行自动化创建

当流程配置好以后,可以进行提单操作,具体步骤可以查看视频查看AD账号创建自动化流程的使用

场景七 如何利用工单进行数据库SQL的自动执行

场景介绍

某公司之前的数据库SQL执行语句需要运维人员接受到需求后,手动执行前,现在可以使用WeOps的IT服务台进行自动化执行。

场景实现

Step1:前提条件介绍

1、WeOps的前期准备

  • WeOps中已经纳管所需要的数据库,如下图,在WeOps-资产数据-资产记录-数据库中,对所需要的数据库进行纳管(目前可支持MySQL和Oracle的执行)

  • 数据库的凭据信息已经录入WeOps-凭据管理中,并且关联该数据库,并授权给对应需要审核的运维管理员

2、工单流程和自动化流程前期准备

  • 在WeOps-管理-服务台管理导入工单流程

  • 在WeOps-后台管理-流程API配置中导入需要的API接口

  • 需要导入的API如下:WeOps组导入获取业务某模型下的资源列表、获取实例凭据列表、获取实例详情、获取用户业务这4个API接口

  • 在后台自动化流程中导入需要的自动化流程

Step2:对导入的流程进行重新配置

前期准备完成后,需要对流程进行重新配置

  • 提单节点:所属应用、数据库这三个字段需要对应配置API接口,作用如下:所属应用展示提单人有权限的应用,类别展示该应用下的资产模型列表,数据库展示选择的数据库类型具体实例列表。具体选择和配置如下图所示

审批节点:数据库凭据需要重新选择接口,作用如下:管理员对提单人提交的SQL语句,数据库信息等进行审核,审核无误后选择该数据库的凭据,便于下一步自动执行。

获取API详情节点:选择对应接口,下面的参数会自动勾选的

自动执行节点:选择需要的自动流程,填写参数

Step3:使用工单流程提单,进行自动化创建

当流程配置好以后,可以进行提单操作

  • 提单:用户提单时需要选择需要执行的数据库实例,并填写SQL语句和申请原因

  • 审批:管理员对提单人的申请信息进行审批,无误后选择执行的数据库凭据

  • 自动执行:提单人的SQL语句将会自动的在对应的数据中进行执行,并返回执行结果成功/失败

场景八 如何利用工单进行vmware虚拟机的自动创建/快照创建/快照回滚

场景介绍

某公司之前的虚拟机创建需要运维人员接受到需求后,手动进行创建,耗时耗力,准确率低,容易出错。采用工单自动化,可以实现申请人自行提单,管理员经过审批就可以创建。

场景实现

Step1:前提条件介绍

1、WeOps的前期准备

  • WeOps中已经纳管所需要的Vcenter,如下图,在WeOps-资产数据-资产记录-Vcenter中,对所需要的Vcenter进行纳管

  • Vcenter的凭据信息已经录入WeOps-凭据管理中,并且关联该Vcenter,并授权给对应需要审核的运维管理员,这样运维管理员在审批工单的时候,就可以选择到这个Vcenter并选择使用对应的凭据,以便后续直接进行自动化的创建。 (用户自动化流程的凭据,建议使用拥有全局权限的管理员角色)

  • 该Vcenter在WeOps-管理-资产管理中,已经设置了定时自动发现,可以自动发现该Vcenter下面的虚拟机、ESXI和数据存储。设置了自动发现后,自动创建的虚拟机可以定时被WeOps自动纳管,以便后续使用(比如自动创建快照,快照回滚)

2、工单流程和自动化流程前期准备

  • 在WeOps-管理-服务台管理导入工单流程

  • 在WeOps-后台管理-流程API配置中导入需要的API接口
  • 需要导入的API共有13个,主要用于虚拟机创建、虚拟机快照创建、虚拟机快照回滚,具体如下

  • 在自动化流程导入需要的自动化流程

Step2:对导入的流程进行重新配置

前期准备完成后,需要对流程进行重新配置

虚拟机创建

工单流程的重新配置重点在第二步“定义与配置流程”,接下来重点介绍下每个节点的流程应该如何配置。

  • 提单节点:所属应用需要对应配置API接口,作用如下:所属应用展示提单人有权限的应用,提单人选择应用后,创建的该虚拟机就归属这个应用。规格配置的字段:CPU规格、内存规格、系统容量、数据盘容量和操作系统,字段保持不变,下拉选项可以配置,以便后续把相关数据传入自动化流程。

  • 审批节点:接入点、Vcenter、VMware凭据三个字段需要配置API接口,作用如下:管理员对提单人提交申请,选择对应接入点,创建虚拟机的Vcenter以及其凭据,便于确定这个虚拟机创建的位置。

*审批节点:规格配置的字段说明如下:CPU规格、内存规格、系统容量和数据盘容量、操作系统的字段是提单节点自动获取的,无需改变;虚拟机模板、网络适配器、ESXI、文件夹的字段需要配置API获取对应信息;子网掩码、网关、DNS、虚拟机名称、IP地址的字段为手段填写;IP是否存在字段是为了验证填写的IP地址是否被使用,需要配置API信息。

  • 获取API详情节点:选择对应接口,填写对应的输入参数,勾选返回数据

自动执行节点:选择需要的自动流程,填写参数

虚拟机快照创建

工单流程的重新配置重点在第二步“定义与配置流程”,接下来重点介绍下每个节点的流程应该如何配置。

  • 提单节点:所属应用、虚拟机信息(IP地址和虚拟机名称)需要对应配置API接口,作用如下:所属应用展示提单人有权限的应用,提单人选择应用后,可以展示该应用下的虚拟机IP列表和名称,便于提单人找下需要创建快照的虚拟机

  • 审批节点:接入点、Vcenter、VMware凭据三个字段需要配置API接口,作用如下:管理员对提单人提交申请,选择对应接入点,创建虚拟机的Vcenter以及其凭据,便于确定这个虚拟机创建的位置。(和虚拟机创建流程的配置方式一致)

  • 审批节点:虚拟机信息中IP地址、虚拟机名称直接获取提单节点的信息,快照名称和描述为手填的,无需特殊配置。

  • 获取API详情节点:选择对应接口,填写对应的输入参数,勾选返回数据

  • 自动执行节点:选择需要的自动流程,填写参数

虚拟机快照回滚

工单流程的重新配置重点在第二步“定义与配置流程”,接下来重点介绍下每个节点的流程应该如何配置。

  • 提单节点:所属应用、虚拟机信息(IP地址、虚拟机名称、快照名称)需要对应配置API接口,作用如下:所属应用展示提单人有权限的应用,提单人选择应用后,可以展示该应用下的虚拟机IP列表和名称,便于提单人找下需要回滚的快照。

  • 审批节点:接入点、Vcenter、VMware凭据三个字段需要配置API接口,作用如下:管理员对提单人提交申请,选择对应接入点和Vcenter以及其凭据,便于确定这个虚拟机的位置。(和虚拟机创建流程的API配置方式一致)

  • 审批节点:虚拟机信息中IP地址、虚拟机名称、快照名称直接获取提单节点的信息,无需特殊配置。

  • 获取API详情节点:选择对应接口,填写对应的输入参数,勾选返回数据

  • 自动执行节点:选择需要的自动流程,填写参数

Step3:使用工单流程提单,进行虚拟机创建/快照创建/快照回滚

当流程配置好以后,可以进行提单操作(以虚拟机创建为例)

  • 提单:用户提单时需要选择需要新建的虚拟机的配置信息,已经应用信息等,补充其他信息,进行提交。

  • 审批:管理员对提单人的申请信息进行审批,并选择对应的Vcenter,补齐虚拟机的相关配置信息后,提交进入到自动创建

  • 自动执行:根据提单节点和审批节点填写的配置信息,进行自动的创建,创建完成之后,提单人会收到对应的通知。

场景九 如何利用工单进行资源变更,并记录在资产的“变更记录”中

场景介绍

Weops-工单支持自动化操作,包括资产自动创建/修改/删除等操作,通过工单进行的资产的变更,支持将变更情况和工单号记录在资产的“变更记录”中,支持查找和溯源。下面以“应用创建”为例进行介绍一下整个流程

场景实现

Step1:工单流程创建

  • 根据实际的场景,设置好工单的提交/流转等配置,并在工单流转的过程中增加“API”节点,进行自动创建应用调用。

  • 这里资产的相关API接口需要使用配置平台对外的接口。WeOps支持记录变更记录的接口如下图。

Step2:流程的提交和流转

流程和服务创建完成之后,按照正常的工单提交和审批流程进行流转。

Step3:自动记录在资产的变更记录

工单完成后,应用已经自动创建了,并且自动记录了变更的情况和关联的工单号

场景十 如何进行云平台监控/纳管的拓展

场景介绍

WeOps内置的云平台不满足需求,需要进行云平台的拓展,包括云平台的资产模型内置、自动发现能力、监控指标管理、监控采集能力等。

场景实现

Step1:云平台插件开发

该文档用于开发Automate的云平台插件,提供扩展云平台的能力,包含对新的云平台及云资产的采集和监控能力,同时结合weops的云平台模板对其进行采集纳管,监控,视图管理等。采用新版监控链路推送,稳定可观测。其中涉及与CMDB模型和关联关系,监控指标等关联,请详细阅读以下内容。

  • 目录结构
cmp_plugins
├── README.md # 帮助文档
├── requirements.txt
└── templatecloud # 新的云平台目录
├── __init__.py
├── format # 格式转换目录
│   ├── __init__.py
│   ├── collect.py # 采集格式转换文件
│   └── credential.py # 凭据转换文件
└── resource_apis
├── __init__.py
└── cw_templatecloud.py # 核心插件文件,命名无要求

如果需要新建一个云,可拷贝templatecloud目录,重命名为newcloud

Format

Collect 采集格式化

定义采集的字段,以及丰富字段能力.支持基础映射支持mako语法(更建议mako语法,功能更强大)

  • 常用语法
from core.driver.cmp.collect import CMPCollectFormat


class NewCloudFormat(CMPCollectFormat):
code = "cmp_collect_newcloud" # 格式`cmp_collect_{newcloud}` 前缀必须固定,后缀使用cmdb模型分类id,否则会影响采集能力
type = "cmp_collect" # 无需修改
tag = "cmp.collect.fusion_insight" # 暂无意义,用于标记此云,可按格式`"cmp.collect.{newcloud}`
name = "XX云数据转换(cmp)" # 中文名
desc = "XX云数据转换(cmp)" # 详细描述
assoc_key = "resource_id" # 关联key,即云对象的唯一值,用于多对象构建关联使用
format_map = {}

format_map支持单对象和多对象

  • 单对象
format_map = {
"resource_name": "hostname",
"resource_id": "hostname",
"ip_addr": "ip",
"vcpus": "cpuCores",
"memory_mb": "totalMemory",
"storage_gb": "totalHardDiskSpace",
"status": "runningStatus",
"os_name": "osType",
"bk_inst_name": "${'%s-%s-%s'%(hostname,clusterName,account_name)}",
}

tips:

  1. bk_inst_name必传,用来定义cmdb的唯一名,格式可使用mako语法自定义
  2. cmdb实例属性如设计为字符串,需使用mako手动转化,如 "${str(xx)}" 否则纳管时会报类型错误
  3. 可以使用context传入的key,如account_name
  • 多对象
assoc_key = "resource_id"  # 关联key,即云对象的唯一值,用于多对象构建关联使用
format_map = {
"fusioninsight_cluster": {
"bk_inst_name": "${'%s-%s-%s'%(name,id,account_name)}",
"fusioninsight_account": "${account_name}",
"resource_name": "name",
"resource_id": "${str(id)}",
},
"fusioninsight_host": {
"resource_name": "hostname",
"resource_id": "hostname",
"ip_addr": "ip",
"vcpus": "cpuCores",
"memory_mb": "totalMemory",
"storage_gb": "totalHardDiskSpace",
"status": "runningStatus",
"os_name": "osType",
"bk_inst_name": "${'%s-%s-%s'%(hostname,clusterName,account_name)}",
"fusioninsight_cluster": "${fusioninsight_cluster_map[str(clusterId)]}"
}
}

tips:

  1. 每个key均为cmdb模型ID,写错无法进行纳管

  2. assoc_key必须得有,value为其云资产的唯一值,用于寻找实例之间的关联

  3. 关联关系的构建需要定义对应key,否则无法对构建其关联关系,即每个对象与另一个对象只能构建一个关联,多个暂不支持如

    "fusioninsight_account": "${account_name}"

    其值必须为关联关系对象的bk_inst_name "fusioninsight_cluster": "${fusioninsight_cluster_map[str(clusterId)]}"

  4. 字典有顺序,即纳管CMDB资产逻辑顺序,务必从上至下进行编写

  5. 内置{bk_obj_id}_map,构建所有资产列表的map,便于下面的对象进行关联构建;

    格式为

    {bk_obj_id}_map={assoc_key_value:bk_inst_name} 
    > assoc_key_value即assoc_key定义的value
    > bk_inst_name即关联的对象bk_obj_id的bk_inst_name

    用法可参考 "fusioninsight_cluster": "${fusioninsight_cluster_map[str(clusterId)]}"

  1. 可以使用context传入的key,如account_name
Credential格式化

用于构建凭据到Driver层的映射,便于从vault中获取凭据后转换进入Driver层

from core.driver.cmp.credential import CMPCredentialFormat
class NewCloudFormat(CMPCredentialFormat):
code = "cmp_credential_newcloud" # 格式`cmp_credential_{newcloud}` 前缀必须固定,后缀使用cmdb模型分类,否则会影响凭据获取
type = "cmp_credential" # 无需修改
tag = "cmp.credential.newcloud" # 暂无意义,用于标记此云,可按格式`"cmp.credential.{newcloud}`
name = "XX云数据凭据转换(cmp)" # 中文名
desc = "XX云数据凭据转换(cmp)" # 详细描述
format_map = {"account": "username", "password": "password"}

tips:

  1. format_map的key是不能修改的,为Driver层的入参,value值分别对应vault管理中的账号和密码的key
# 账号密码型
format_map = {"account": "username", "password": "password"}
# ak/sk型
format_map = {"account": "ak", "password": "sk"}
MakoFormat详细介绍

tips:

  1. 支持字典key映射,如"resource_name": "resourceName"

  2. 支持字典嵌套映射,如"resource_name": "resourceName.xx"

  3. 支持列表下标,如"inner_ip": "resourceIp.0"

  4. 支持mako语法引用变量,即${key},如"bk_obj_id": "${vm_obj}"

  5. 支持沙箱,可支持的语法较多

    • 字符串拼接 语法: ${"prefix" + K EY}${"prefix%s" % KEY}${"prefix{}".format(KEY)}${"%s%s" % (KEY1, KEY2)}

    • 字符串变换 语法:${KEY.upper()}${KEY.replace("\n", ",")}${KEY[0:2]}、${KEY.strip()}

    • 数字运算 语法:${int(KEY) + 1}${int(KEY)/10}

    • 类型转换 语法:${KEY.split("\n")}${KEY.count()}${list(KEY)}${[item.strip() for item in KEY.split("\n")]}

    • 复杂类型取值 语法:${KEY["a"]["b"]},${KEY[1][2]["a"]}

    • 支持的python内置函数

        ['abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip', '__import__', 'datetime', 're', 'hashlib', 'random', 'time', 'os']
  6. 支持字段重写,入参item为此次迭代的字典,context为全局变量

    • 单对象单key重写get_{key}
    • 多对象单key重写get_{bk_obj_id}_{key}
    • 统一重写 get

云平台API

目录:cmp_plugins/xxcloud/resource_apis/cw_xxcloud

类设计

包含2种类设计,如多个版本,可设计多个XXCloud

  • CwXXCloud 》 云平台基础类,用于认证以及一些版本管理

    • CwXXCloud务必添加@register

    • from cmp.cloud_apis.resource_client import register
      @register
      class CwTemplateCloud(object):
      pass
  • XXCloud 》用于对接某版本各种增删改查API接口类,如查询虚机,查询所有资源,查询监控数据

    • list_vms 虚拟机列表接口(单对象)

    • list_hosts 宿主机列表接口(单对象)

      • 返回格式

          {
        "result": true,
        "data": [
        {
        "resource_id": "123",
        "resource_name": "vm_test_1"
        },
        {
        "resource_id": "456",
        "resource_name": "vm_test_1"
        }
        ]
        }
    • list_hosts 宿主机列表接口(单对象)

    • list_xxs其他实例列表接口(单对象)

    • list_all_resouces 获取所有资源(多对象)

      • 返回格式
       {
      "result": true,
      "data": {
      "template_vms": [ # template_vms为某云虚拟机的bk_obj_id
      {
      "resource_id": "123",
      "resource_name": "vm_test_1"
      },
      {
      "resource_id": "456",
      "resource_name": "vm_test_1"
      }
      ],
      "template_ds": [ # template_ds为某云存储的bk_obj_id
      {
      "resource_id": "123",
      "resource_name": "ds_test_1"
      },
      {
      "resource_id": "456",
      "resource_name": "ds_test_1"
      }
      ]
      }
      }
    • get_weops_monitor_data获取监控数据

      • 入参kwargs
      参数描述是否必填举例
      StartTime起始时间2023-7-25 10:10:00
      EndTime结束时间2023-7-25 10:15:00
      Period时间间隔(s)300
      resourceId资源实例id,多个逗号分割vm-01,vm-02
      Metrics指标名,列表["cpuUsage","totalMemory"]
      context上下文,用于识别多对象看下面👇🏻
      • context格式
      {
      "resource"[
      {
      "bk_obj_id": "qcloud_cvm",
      "bk_inst_id": 111,
      "resource_id": "ins-qnopai6m",
      "bk_inst_name": "深信服",
      "bk_biz_id": 2
      },
      {
      "bk_obj_id": "qcloud_cvm",
      "bk_inst_id": 222,
      "resource_id": "ins-0g4ehetc",
      "bk_inst_name": "autopack",
      "bk_biz_id": 2
      }
      ]
      }
      • 无维度返回格式
      {'result': True, 'data': 
      {'MRS-MN-02':
      {
      'cpuUsage': [(1689585060000, 4.0)],
      'memoryUsedRatio': [(1689585060000, 0.11)]
      },
      'MRS-MN-01':
      {'cpuUsage': [(1689585060000, 2.0)],
      'memoryUsedRatio': [(1689585060000, 0.04)]
      }
      }
      }
      • 有维度返回格式
      {'result': True, 'data': 
      {'MRS-MN-02':
      {'freeSpace':
      {
      (('mountPoint', '/'),): [(1689585060000, 14.66)],
      (('mountPoint', '/boot'),): [(1689585060000, 4.85)],
      }
      }
      }
      }
      • data数据内部介绍

        第一层为云实例id,如MRS-MN-02

        第二层为监控指标key,如freeSpace

        第三层

        ​ 如无维度,则value为时间戳与值的元组列表

        ​ 如有维度,第三层为

        ​ key为维度key和value的嵌套元组,支持多维度,每个维度为一个元组

        ​ value为时间戳与值的元组列表

        ​ 单维度(('mountPoint', '/'),): [(1689585060000, 14.66)]

        ​ 多维度(('mountPoint', '/'),('xx','1')): [(1689585060000, 14.66)]

依赖

  • requirements.txt填写额外依赖包,如xxsdk等

  • 该版本暂不支持依赖包的直接引入,可重新生成docker镜像构建。

Step2:云平台插件开发

该文档旨在编写云平台资源,凭据,监控模板数据,用于weops平台-系统设置-插件管理-导入云平台模板文件。

  • 请按顺序依次导入,资产》凭据》监控
  • 导入后,请确认云平台各个菜单栏是否多出一个tab,名称为模型分类名称
  • 导入资源配置后,请确认模型是否生成,模型字段是否正常
  • 导入凭据配置后,请确认凭据管理处是否正常创建编辑
  • 导入监控配置后,请确认监控管理的指标管理中指标是否正常
  • 如上述操作出现异常请求,请排查celery.log日志确认问题根因,并检查模板文件是否编写错误。

1.模型配置

字段说明
字段类型描述
classificationdict模型分类信息
objectslist模型分类下的模型列表
associationslist模型列表中模型之间的关联关系
cannula_ruleslist模型实例纳管规则,按照列表顺序纳管
  • classification:
字段类型描述
bk_classification_idstr模型分类ID
bk_classification_namestr模型分类名称
  • objects:
字段类型描述
bk_obj_idstr模型ID
bk_obj_namestr模型名称
bk_obj_iconstr模型图标,默认icon-cc-default
attrslist模型属性列表
  • objects.attrs:

注意:attrs中必须有属性resource_id,对应云平台资产唯一ID。

字段类型描述
bk_property_idstr属性ID
bk_property_namestr属性名称
bk_property_typestr属性类型
unitstr属性单位
placeholderstr占位符
editablebool是否可编辑
isrequiredbool是否必填
optionstr枚举内容
  • associations:
字段类型描述
bk_obj_idstr源模型ID
bk_asst_obj_idstr目标模型ID
bk_asst_idstr关联
bk_obj_asst_idstr源模型与目标模型的关联关系ID
bk_obj_asst_namestr源模型与目标模型的关联关系名称
mappingstr模型对应关系
  • cannula_rules:
字段类型描述
bk_obj_idstr纳管模型ID
associationslist纳管模型关联列表
  • cannula_rules.associations:
字段类型描述
bk_asst_obj_idstr目标模型ID
bk_obj_asst_idstr源模型与目标模型的关联关系ID
模板
{
"classification": {
"bk_classification_id": "FusionInsight",
"bk_classification_name": "FusionInsight"
},
"objects": [
{
"bk_obj_id": "fusioninsight_account",
"bk_obj_name": "FusionInsight平台",
"bk_obj_icon": "icon-cc-default",
"attrs": [
{
"bk_property_name": "资产编码",
"bk_property_id": "asset_code",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
}
]
},
{
"bk_obj_id": "fusioninsight_cluster",
"bk_obj_name": "FusionInsight集群",
"bk_obj_icon": "icon-cc-default",
"attrs": [
{
"bk_property_name": "资产编码",
"bk_property_id": "asset_code",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "资源ID",
"bk_property_id": "resource_id",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "资源名称",
"bk_property_id": "resource_name",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "是否自动发现",
"bk_property_id": "auto_collect",
"unit": "",
"placeholder": "",
"bk_property_type": "bool",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "上次更新时间",
"bk_property_id": "collect_time",
"unit": "",
"placeholder": "",
"bk_property_type": "time",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "接入点",
"bk_property_id": "access_point",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
}
]
},
{
"bk_obj_id": "fusioninsight_host",
"bk_obj_name": "FusionInsight主机",
"bk_obj_icon": "icon-cc-default",
"attrs": [
{
"bk_property_name": "资产编码",
"bk_property_id": "asset_code",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "资源ID",
"bk_property_id": "resource_id",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "资源名称",
"bk_property_id": "resource_name",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "是否自动发现",
"bk_property_id": "auto_collect",
"unit": "",
"placeholder": "",
"bk_property_type": "bool",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "上次更新时间",
"bk_property_id": "collect_time",
"unit": "",
"placeholder": "",
"bk_property_type": "time",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "接入点",
"bk_property_id": "access_point",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "内网IP",
"bk_property_id": "ip_addr",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "vCPU数",
"bk_property_id": "vcpus",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "内存容量(MB)",
"bk_property_id": "memory_mb",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "磁盘容量(GB)",
"bk_property_id": "storage_gb",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "状态",
"bk_property_id": "status",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
},
{
"bk_property_name": "操作系统名称",
"bk_property_id": "os_name",
"unit": "",
"placeholder": "",
"bk_property_type": "singlechar",
"editable": true,
"isrequired": false,
"option": ""
}
]
}
],
"associations": [
{
"bk_obj_asst_id": "fusioninsight_account_group_set",
"bk_obj_asst_name": "",
"bk_obj_id": "fusioninsight_account",
"bk_asst_obj_id": "set",
"bk_asst_id": "group",
"mapping": "n:n"
},
{
"bk_obj_asst_id": "fusioninsight_cluster_group_module",
"bk_obj_asst_name": "",
"bk_obj_id": "fusioninsight_cluster",
"bk_asst_obj_id": "module",
"bk_asst_id": "group",
"mapping": "n:n"
},
{
"bk_obj_asst_id": "fusioninsight_cluster_belong_fusioninsight_account",
"bk_obj_asst_name": "",
"bk_obj_id": "fusioninsight_cluster",
"bk_asst_obj_id": "fusioninsight_account",
"bk_asst_id": "belong",
"mapping": "n:n"
},
{
"bk_obj_asst_id": "fusioninsight_host_group_module",
"bk_obj_asst_name": "",
"bk_obj_id": "fusioninsight_host",
"bk_asst_obj_id": "module",
"bk_asst_id": "group",
"mapping": "n:n"
},
{
"bk_obj_asst_id": "fusioninsight_host_belong_fusioninsight_cluster",
"bk_obj_asst_name": "",
"bk_obj_id": "fusioninsight_host",
"bk_asst_obj_id": "fusioninsight_cluster",
"bk_asst_id": "belong",
"mapping": "n:n"
}
],
"cannula_rules": [
{
"bk_obj_id": "fusioninsight_cluster",
"associations": [
{
"bk_asst_obj_id": "fusioninsight_account",
"bk_obj_asst_id": "fusioninsight_cluster_belong_fusioninsight_account"
}
]
},
{
"bk_obj_id": "fusioninsight_host",
"associations": [
{
"bk_asst_obj_id": "fusioninsight_cluster",
"bk_obj_asst_id": "fusioninsight_host_belong_fusioninsight_cluster"
}
]
}
]
}
{
"cannula_rules": [
{
"bk_obj_id": "fusioninsight_cluster",
"associations": [
{
"bk_asst_obj_id": "fusioninsight_account",
"bk_obj_asst_id": "fusioninsight_cluster_belong_fusioninsight_account"
}
]
},
{
"bk_obj_id": "fusioninsight_host",
"associations": [
{
"bk_asst_obj_id": "fusioninsight_cluster",
"bk_obj_asst_id": "fusioninsight_host_belong_fusioninsight_cluster"
}
]
}
]
}

2.凭据

字段说明
parmas: 凭据表单字段
-key 凭据id
-name 凭据名称
-value 默认值
-type 数据类型
-per_key 父类key
-pre_value 父类的value
-display 数值是不是展示
-placeholder 提示语

bk_obj_id:唯一id,采集对象是单对象时就是采集对象的bk_obj_id,多对象时是采集对象的cmdb模型分类id
name: cmdb模型分类id
cn_name:cmdb模型分类中文名
account_obj_id: cmdb账号模型id
account_name: cmdb账号模型账号名称
regions: 是否需要选择区域
config:配置
-module 采集函数
-driver driver类型 目前有ansible和cloud
-type 采集类型 目前有ansible和cloud
模版
{
"params": [{
"key": "username",
"name": "用户名",
"type": "string",
"value": "",
"display": true,
"options": [],
"pre_value": "",
"pre_select": "",
"placeholder": ""
}, {
"key": "password",
"name": "密码",
"type": "password",
"value": "",
"display": false,
"options": [],
"pre_key": "",
"pre_value": "",
"placeholder": "root"
}],
"name": "FusionInsight",
"cn_name": "FusionInsight",
"account_obj_id":"fusioninsight_account",
"account_name":"FusionInsight平台",
"bk_obj_id":"fusioninsight_host",
"regions":false,
"config": {
"module": "list_all_resources",
"driver": "cloud",
"type": "cloud"
}
}

3.监控

字段说明
cn_name: cmdb模型分类名称
name: cmdb模型分类id
account_obj_id: cmdb账号模型id
account_name: cmdb账号模型账号名称
children: 监控指标模型数组
-bk_obj_id cmdb模型id
-bk_obj_name cmdb模型名称
-bk_classification_id cmdb模型分类id
metrics: 指标数组
-unit_id
-field_type 指标数组类型
-metric 指标英文名称
-name 指标中文名称
-unit 单位
-unit_suffix_id 单位ID
-tag 指标类型,只能是metric(指标)和dimension(维度)
-unit_suffix_list 单位列表
-id 单位id
-name 单位名称

如存在以下3个指标,CPU使用率(CpuUseRate),内存使用率(MemoryUseRate),磁盘使用率(VolumeRate),务必使用括号中的英文KEY作为metric字段,方便weops列表页面展示
模板
{
"cn_name": "FusionInsight",
"name": "FusionInsight",
"account_obj_id": "fusioninsight_account",
"account_name": "FusionInsight平台",
"children": [{
"bk_obj_id": "fusioninsight_cluster",
"bk_obj_name": "FusionInsight集群",
"bk_classification_id": "FusionInsight",
"metrics": []
}, {
"bk_obj_id": "fusioninsight_host",
"bk_obj_name": "FusionInsight主机",
"bk_classification_id": "FusionInsight",
"metrics": [
{
"unit_id": "percent",
"field_type": "float",
"metric": "cpuUsage",
"name": "CPU使用率",
"unit": "percent",
"unit_suffix_id": "%",
"tag":"metric",
"unit_suffix_list": [{
"id": "%",
"name": "%"
}]
},
{
"unit_id": "M",
"field_type": "float",
"metric": "availableMemory",
"name": "空闲内存",
"unit": "M",
"tag":"metric",
"unit_suffix_id": "M",
"unit_suffix_list": [{
"id": "M",
"name": "MB"
}]
},
{
"unit_id": "percent",
"field_type": "float",
"metric": "memoryUsedRatio",
"name": "内存使用率",
"unit": "percent",
"tag":"metric",
"unit_suffix_id": "%",
"unit_suffix_list": [{
"id": "%",
"name": "%"
}]
},
{
"unit_id": "percent",
"field_type": "float",
"metric": "hardDiskSpaceUsedRatio",
"name": "磁盘空间使用率",
"unit": "percent",
"tag":"metric",
"unit_suffix_id": "%",
"unit_suffix_list": [{
"id": "%",
"name": "%"
}]
},
{
"unit_id": "G",
"field_type": "float",
"metric": "freeSpace",
"name": "磁盘分区剩余容量",
"unit": "G",
"tag":"metric",
"unit_suffix_id": "G",
"unit_suffix_list": [{
"id": "G",
"name": "GB"
}]
}

]
}]
}