跳到主要内容

资源纳管配置

1.0 资产和应用关系说明

WeOps所有资源模型之间的关联关系如下:

不同客户不同资产的应用归属链路略有不同,为了满足不同客户的特殊需求,支持对各个资产的应用归属链路进行自定义。

  • 应用链路配置页面:每个资产只能开启一条应用链路,并依据该链路寻找归属应用(k8s的workload、pod支持同时开启所有默认链路规则)

  • 内置各资产应用链路:各内置资产模型均内置默认应用链路规则,具体内置链路说明如下

主机

如下图,主机直接与“模块”关联,其应用归属来自于所属的模块的应用。

数据库/中间件

如下图,数据库/中间件与主机关联,其应用归属来自于关联的主机应用属性。

K8S

如下图,K8S集群、命名空间、工作负载、pod、node的关联关系如图,各个模型的应用属性描述如下:

K8S集群:直接与集群关联,从而获得应用属性

命名空间:直接与集群关联,从而获得应用属性

node:来自于关联的K8S集群的应用属性

工作负载:共有两条链路,“K8S工作负载-K8S命名空间-集群”、“K8S工作负载-K8S工作负载-K8S命名空间-集群”

pod:共有三条链路,“Pod-K8S工作负载-K8S命名空间-集群”、“ Pod-K8S命名空间-集群”、“Pod-K8S工作负载-K8S工作负载-K8S命名空间-集群”

网络设备&硬件设备

如下图,交换机、路由器、负载均衡、防火墙等网络设备,硬件服务器、安全设备等硬件设备都直接与集群关联,从而获得对应的应用属性。

云平台-VMware

如下图,Vcenter、虚拟机、ESXI、数据存储直接的关联关系如图,各个模型的应用属性描述如下

vcenter:直接与集群关联,从而获得应用属性

虚拟机、ESXI、数据存储:各自直接与模块关联,从而获得应用属性

云平台-腾讯云/阿里云

如下图,云账户直接与集群关联,从而获得应用属性,云服务器(CVM、ECS)直接与模块关联,从而获得应用属性。

云平台-manageone

如下图,华为云Manageone平台的关联关系如下,各类对象的的应用归属描述如下

  • ManageOne平台:与集群管理,从而获得应用属性

  • 云服务器、云平台、宿主机、数据存储:直接与模块关联,从而获得应用属性

云平台-SangforHCI

如下图,SangforHCI平台的关联关系如下,各类对象的应用归属米搜狐如下

  • SangforHCI平台:直接与集群关联,从而获得集群的应用属性

  • 虚拟机:直接与模块关联,从而获得应用属性

云平台-FusionInsight

如下图,FusionInsight平台的关联关系如下,各类对象的应用归属米搜狐如下

  • FusionInsight平台:直接与集群关联,从而获得集群的应用属性

  • FusionInsight集群/主机:直接与模块关联,从而获得应用属性

云平台-华为云

如下图,华为云平台的关联关系如下,各类对象的应用归属米搜狐如下

  • 华为云账号:直接与集群关联,从而获得集群的应用属性

  • 华为云ECS:直接与模块关联,从而获得应用属性

1.1 主机纳管

背景介绍:需要把主机纳入到WeOps的管理中,有两种方式进行:一是手动创建仅记录主机信息,二是安装Agent进行主机信息的自动采集

方式一:手动创建

路径:资产-资产记录-主机

手动创建仅录入主机的相关信息,进行主机的信息管理和拓扑展示,若需要对手动创建的主机进行监控数据采集,需要对其进行Agent安装。

Step1:进入界面,点击“新建”

Step2:填写主机相关信息

在弹出的抽屉中填写相关主机信息,必填字段包括:内网IP、云区域

手动创建的主机agent状态为“未安装”,若需要安装agent,则前往“管理-管理中心-监控管理-监控采集”进行agent的安装。

方式二:安装Agent

路径:管理-监控管理-监控采集

以安装agent的方式进行主机的纳管,在agent安装后,可在“资产数据-资产记录(主机)”中形成对应的主机信息,同时支持监控数据的采集。可以选择手动单个agent安装,或者利用表格导入进行批量安装,安装步骤基本一致。

Step1:进入界面,点击安装Agent

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

Step2:填写相关信息

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

Step3:等待安装成功

上一步骤点击安装将会跳转至安装界面,可以查看执行状态,点击查看日志可以查阅安装过程。

安装完成回到主机纳管的界面可以看到该主机的Agent已经顺利安装。

1.2 应用新建

背景介绍:当有新应用上线时,需要在WeOps的应用管理对该应用进行纳管,具体步骤如下:新建应用,填写该应用相关信息→确定该应用层级并配置拓扑→添加主机,进行管理。

Step1:新建业务

路径:资产-应用

在应用列表页面,点击“添加应用”按钮,可以进行应用的新建。需填写基础信息和角色信息。

Step2:配置应用拓扑

路径:资产-应用

  • 进入新创建的应用的详情页面,点击左侧的节点信息,展示该应用的拓扑

  • 点击页面左侧的拓扑的对应节点,可依据实际情况依次添加“子应用”、“集群”和“模块”等层级

Step3:主机分配和移动

路径:资产-应用

应用的拓扑新建完成后,可以向各个节点添加主机。选中需要添加的节点,点击“主机列表”下的“添加主机”按钮,这里展示了所有没有归属应用的主机列表(展示手动创建/安装Agent两种方式下未归属应用主机),选择需要加入的主机,点击下一步,选择模块即可添加成功。

1.3 数据库/中间件纳管

背景介绍:关联主机已经进行Agent的安装,并且Agent正常(主机Agent安装详见1.1主机纳管),这里以Oracle为例进行介绍,有两种方式进行资源的纳管,一种是手动纳管,一种是创建自动发现任务进行资产纳管。

方法一:手动纳管

路径:资源-资源记录-数据库(Oracle)

Step1:进入界面,点击“新建”,进行实例信息录入

点击“新建”按钮后,在弹出的抽屉中,填入Oracle的相关信息。

Step2:建立与主机的关联

实例新建完成后,点击“查看”按钮,进入到该实例的详情页。

点击“关联信息”中的“关联管理”,建立该Oracle数据库和对应主机的关联关系。

手动创建的资产的配置信息需求手动维护和更新。

方法二:自动发现

路径:管理-资产管理-自动发现

选择数据库-Oracle,创建自动发现任务,新建任务时,选择资产的IP范围、输入对应凭据

自动发现任务执行完成后,资产数据有如下更新:新增Oracle资产、根据周期实时更新资产配置信息、自动关联对应主机。

1.4 云平台纳管(以腾讯云为例)

背景介绍:运维部门需要对云平台(VMware/阿里云/腾讯云)进行资产管理,并展示其直接的关联关系,可以在WeOps的资产数据进行管理,进行云平台的纳管,有两种方式进行:一是手动纳管,手动维护资产信息和关联关系,二是自动发现,自动发现资产信息、关联关系,并自动更新。这里以阿里云为例进行介绍。

方法一:手动纳管

路径:资源-资源记录-腾讯云

如下图,在“腾讯云—云账户”页面,点击“新建”按钮,进行腾讯云账号的创建,这里的“腾讯云账号”是为了区分不同账号下的云服务器而创建的资产模型

如下图,在“腾讯云-CVM”页面,点击“新建”按钮,进行云服务器的创建,并手动填写对应信息。

创建完成后,在CVM的实例详情中,进行其与云账户的关联。

方法二:自动发现

路径:资源-资源记录-腾讯云

如下图,在“腾讯云—云账户”页面,点击“新建”按钮,先进行腾讯云账号的创建。

路径:管理-资产管理-自动发现(腾讯云)

在自动发现页面,选择腾讯云,进行腾讯云某个账号下云服务器的发现和采集。在创建采集任务时,可以选择使用已有的凭据,云平台的凭据可在“资产-凭据管理-云平台”中维护,若无关联凭据,在新建自动发现任务时可以新建凭据。

  • 阿里云/腾讯云/VMware设置自动发现的账号需要的最小化权限为:只读权限,具体如下

  • 域名配置如下:阿里云的域名都是带{资源}+{region}的,例如ecs.cn-guangzhou.aliyuncs.com。腾讯云的域名带{资源}的,例如cvm.tencentcloudapi.com

自动发现完之后,自动采集该腾讯云账号下的所有的CVM及其信息,并在“资产记录-腾讯云-CVM”中自动新增/更新信息。

1.5 K8S纳管

背景介绍:需要对K8S集群以及相关的命名空间、工作负载、pod、node的信息进行采集和呈现。“WeOps-资产记录”已经内置K8S五项模型及关联关系,包括“K8S集群”、“K8S命名空间”、“K8S工作负载”、“Pod”、“Node”

原理介绍

WeOps对k8s进行配置发现与采集的原理如图

需要额外部署的组件和功能:

1、kube-state-metrics: 集群配置信息的发现采集,需要其他服务主动调取,采用helm的形式在k8s中部署

2、Prometheus-agent: 从kube-state-metrics中获取数据,并推送到weops-prometheus,用helm chart的形式在k8s中部署

3、weops-promtheus: 数据临时存储,weops从此获取原始的资产数据,用docker的形式部署在appt

整体步骤:K8S部署操作——手动创建K8S集群实例——设置自动采集任务——自动采集K8S命名空间、工作负载、pod、node信息,并形成关联拓扑图

Step1:K8S部署操作

1、环境准备(basic auth的用户名密码默认为admin:admin,可按需调整)

在蓝鲸配置平台导入k8s模型组(关联关系必须准确

#!/bin/bash
mkdir /data/weops/prometheus/tsdb -p
cd /data/weops/prometheus

cat << "EOF" > prometheus-web.yml
basic_auth_users:
admin: $2y$12$Dx1PAPXkUcW10NhuRh.3iuHHDzmT7h6sgv1siHXksRbYk8RrqKkvC
EOF

cat << "EOF" > prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
EOF

docker load < prometheus.tgz

2、在appt启动weops附带的prometheus实例:

docker run -d --net=host -v /data/weops/prometheus/prometheus-web.yml:/opt/bitnami/prometheus/conf/prometheus-web.yml -v /data/weops/prometheus/prometheus.yml:/opt/bitnami/prometheus/conf/prometheus.yml bitnami/prometheus --name=prometheus --web.listen-address=0.0.0.0:9093 --web.enable-remote-write-receiver --web.config.file=/opt/bitnami/prometheus/conf/prometheus-web.yml --config.file=/opt/bitnami/prometheus/conf/prometheus.yml --storage.tsdb.retention.time=30m

运行后telnet localhost 9093 验证部署是否成功

3、在k8s集群中部署kube-state-metrics和promtheus(要求客户的镜像仓库中已有kube-state-metricsd:v2.5.0和prometheus:2.38.0镜像)

在k8s的control-plane上解压helm chart并部署,具体操作步骤可以查看gihub具体解释和操作步骤:https://github.com/WeOps-Lab/WeOps-Charts/

正常应输出(REVISION: 1):

检查pod状态:

kubectl get po -n weops

检查prometheus-agent状态:

Step2:创建K8S集群实例

路径:资源-资源记录-K8S(K8S集群)

如下图,在K8S集群页面中点击“新建”按钮,进行K8S集群实例的创建

Step3:创建K8S集群自动发现

路径:管理-资产管理-自动发现

如下图,在自动页面中点击“新建”按钮,进行K8S集群自动发现的任务的创建,创建时仅需要填写任务名称、选择需要采集K8S集群实例名称、设置采集频率即可。

任务创建完成后,可根据设置的采集频率进行采集,也可点击“立即发现”

Step4:自动发现相关信息

路径:资源-资源记录-K8S(K8S命名空间、K8S工作负载、Pod、Node)

设置自动发现任务后,自动发现该K8S集群下的命名空间、工作负载、Pod、Node相关实例信息,及其关联关系

1.6 网络设备纳管

背景介绍:运维部门需要对网络设备(交换机/路由器/负载均衡/防火墙)进行资产管理,并展示其直接的关联关系,可以在WeOps的资产数据进行管理,第一步需要进行网络设备的纳管,有两种方式进行:一是手动纳管,手动维护资产信息和关联关系,二是自动发现,自动发现资产信息、关联关系,并自动更新。这里以交换机为例进行介绍。

方法一:手动纳管

路径:资源-资源记录-基础设备(交换机)

在交换机的页面,点击“新建”按钮,进行资产的新建,填写必要的信息,包括品牌/型号等等,手动创建的资产需要手动维护/更新配置信息。

方法二:自动发现

路径:管理-资产管理-自动发现(网络设备)

在自动发现页面,选择网络设备,进行网络设备的自动发现任务的创建。

任务创建完成后,任务将会按照填写的信息和时间进行执行,执行完后,若有未识别到的OID,建议点击按照提示添加到OID库,以便后续可以直接自动发现和采集相关的信息。

【特殊说明如下】
在网络设备自动发现过程中,只有网络设备的品牌和型号在OID库的,才能自动发现和采集到相关的信息。如果需要拓展自动发现的范围有两种方式
(1)在管理-资产管理-OID库手动添加需要自动发现的网络设备的品牌型号的OID,添加完成后,自动发现即可发现相关信息。
(2)创建自动发现任务后,经过一次扫描,若有未识别到的OID,根据提示,在OID库中添加,添加完成后,自动发现即可发现相关信息

自动发现完成以后,自动采集到的网络设备已经对应的品牌、型号会自动更新到“资产数据-资产记录-交换机“里面

网络拓扑,对于自动发现的网络设备,展示了各个设备的拓扑图,可以通过自动关联/手动关联的方式,完善网络设备的拓扑图。

  • 注:只有符合内置OID库的网络设备品牌和型号的设备才可以被自动发现,若需要拓展OID库,如下图,可进行不同品牌型号的网络设备的OID新增,新增完成后,可进行自动发现和采集。

1.7 配置文件纳管(以主机配置文件为例)

背景介绍:运维部门需要对资源的配置文件进行资产管理,方便查看和使用,目前WeOps已经内置好“配置文件”的模型,已经与各个资产模型相关联,支持对各个资源的配置文件上传和管理,另外WeOps支持对主机类/网络设备类的配置文件自动发现和更新。

Step1:前提条件,确认关联

路径:管理-资产管理-模型管理

如下图,以主机为例,在资产管理-模型管理中,点击“配置文件”模型的按钮,在“关联”中,检查关联情况

Step2:配置文件创建

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

当资源模型的关联配置完成以后,就可以在主机的详情页看到配置文件的tab,如下图,在主机列表中,点击“查看”按钮

如下图,可以进行配置文件的创建,选择对应的维护人,每个配置文件点击详情后,可以查看这个配置文件的具体内容

  • 关于文件的上传有两种方式,对于主机/网络设备类的资产,已经支持自动采集的能力,可以创建配置文件的自动采集任务进行文件的采集和版本的更新;对于其他资产的配置文件来说,需要进行手动的上传和版本的维护。

Step3:配置文件自动采集

路径:管理-资源管理-自动发现

  • 对于主机/网络设备来说,配置文件支持自动发现和自动采集,所以在自动发现页面,选择配置文件进行配置文件自动采集任务的创建,这里以主机为例进行介绍

  • 任务执行后,可以在“资源-资产记录-主机-配置文件”中,查看这个主机的这个配置文件的采集信息

Step3:配置文件手动维护

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

  • 对不同版本的配置文件进行手动上传文件,修改/删除等操作,也可以支持预览

Step4:配置文件使用

  • 针对不同版本的文件,支持选择两个版本的文件进行对比,并标出差别之处

  • 针对变更记录,可查看每个配置文件的变更情况,以及变更前后的对比。

1.8 SSL证书纳管

背景介绍:运维部门关于多个域名,对于域名的证书相关信息的管理也尤为重要,尤其是证书的到期时间,WeOps提供SSL证书自动发现和采集能力,支持定期采集/更新证书的信息,结合事件到期提醒功能,即将到期的证书发送提醒。

Step1:创建证书实例

路径:资源-资产记录-证书

  • 如下图,在资产记录中创建一个SSL证书的实例,以便后续自动发现使用。

Step2:创建证书自动发现

路径:管理-资产管理-自动发现

  • 如下图,选择自动发现-SSL证书,选择刚才创建的正式实例,并为这个证书填写域名,比如“wedoc.canway.net”,填写完成,选择对应的扫描周期,即可按照周期进行扫描。当证书更新后,也会根据最新的扫描情况,进行更新相关信息。

Step3:证书自动发现/更新

路径:资源-资产记录-证书

*任务执行完成后,在资产记录的列表,可以看到采集的证书信息,包括“颁发者”、“域名”、“颁发时间”、“截止日期”等信息。

Step4:到期提醒

路径:资源-事件订阅

  • 当证书自动发现和采集创建完成之后,可以针对需求,对证书的到期时间进行订阅,在“事件订阅”中创建任务,选择证书的“截止日期”字段,创建扫描和提醒的时间,配置完后,会安装配置的提醒时间,发送邮件提醒。

1.9 IP发现

背景介绍:适用于以下场景

1、查看资产IP:自动发现的IP和资产关联,可以查看资产使用的IP情况 2、判断IP是否空闲:查看IP列表,确定IP是否被使用 3、查看子网IP的使用情况:通过子网的关联情况和剩余量等数据,查看子网使用情况

step1:手动录入子网

路径:资产-资产记录-IP管理-子网

录入子网的网段,比如192.168.0.0/24,录入后:自动识别子网总容量、自动识别子网掩码

step2:创建IP自动扫描任务

路径:管理-资产管理-配置采集-IP

选择对象类型(目前支持网络设备的),选配扫描周期,选配凭据等信息

step2:效果查看

路径:资产-资产记录-IP管理-子网/IP

1、自动录入IP信息和关联关系

2、子网根据关联的IP地址情况,自动更新余量信息

3、根据子网和IP的关联信息,自动生成IP视图,展示该子网下所有IP地址的使用情况

1.10资产扫描

背景介绍:资产扫描一般有以下几种应用场景:一、纳管层面:资产扫描是从空白到扫描出来有资产的,然后进行配置发现,自动更新配置的;二、安全层面,比如护网全量扫描不在cmdb的资产,扫出来异常的ip进行重点关注;三、运营层面,扫描ip不在管理范围内的,进行ip认领或者回收

  • 目前WeOps资产扫描支持的协议有telnet和ICMP ping。

  • ICMP Ping扫描:ICMP是Internet控制报文协议,其中的Ping命令可以用于检测目标主机的可达性。Ping扫描程序会向目标主机发送ICMP Echo Request包,如果目标主机响应了ICMP Echo Reply包,就表示目标主机是可达的。

  • Telnet是一种远程登录服务,在扫描中常用于探测目标主机的开放端口。扫描程序会发送一个特定的Telnet请求到目标主机的目标端口,如果返回的响应表明该端口是开放的,就表示目标主机上运行着相应的服务

step1:设置好识别规则

路径:管理-资产管理-资产扫描

telnet协议需要扫描特定的端口,需要提前定义好端口和资产类型之间的关系,便于根据开放的端口识别资产类型。如下图,weops根据数据库和中间件默认的端口内置了一条规则,支持调整。

step2:创建扫描任务

路径:管理-资产管理-资产扫描

扫描任务,如下图,支持资产扫描任务的创建,可设置IP扫范围,支持ping(IP)、telnet(IP+端口)从网络中发现IT资产,支持配置CMDB的对比范围,进行对比。安装扫描的协议扫描出来的资产,会根据cmdb的资产范围进行对比,未纳管的资产,会呈现在“未纳管”列表中。

  • 未纳管资产,扫描的结果中,和cmdb对比后,cmdb没有纳管的资产会呈现在列表中,并按照识别规则展示资产的类型,对于未纳管的资产,支持一键纳管至cmdb中

1.11资产扫描

背景介绍

为了直观的展示机柜内设备的布局和状态,新增机房视图,用于各类IT设备的集中管理和展示。

step1:资产设置

路径:资产-资产记录-数据中心

在资产记录中已经内置常用资产模型“数据中心-机房-机柜-设备(网络设备/硬件设备等)”,需要在资产记录的对应位置创建资产实例、填写位置信息并创建关联,步骤如下

①:创建数据中心实例并填写信息。比如“深圳数据中心”

②:创建机房实例,并且关联到数据中心。比如创建“2号机房”,并且创建它与“深圳数据中心”的关联

③:创建机柜实例,必须填写“机柜位置”字段,并且创建机柜与机房的关联关系。比如2楼机房放置了10个机柜,需要填写机柜的基本信息,必填“机柜位置”(机柜位置的填写标准格式为“A01”、“B11”等),创建机柜与机房的关联。通过机柜的位置和关联关系,可在机房视图中渲染出位置。

④:创建设备实例,支持“网络设备”和“硬件设备”分组下的实例,放置在对应机柜中,设备需要填写开始U位和结束U位,并创建与机柜的关联,可以渲染出机柜视图。

step2:查看视图

路径:资产-机房视图

根据“机房-机柜”关联和填写机柜的位置,在视图中按照机柜的位置和类型展示。

根据“机柜-设备”关联和设备的开始U位和结束U位,在机柜视图中展示设备的位置和信息

1.12自动发现插件拓展

背景介绍

企业通常使用各种不同类型的技术和工具,涉及到中间件、数据库等多种资产。手动收集这些配置信息不仅费时费力,而且容易出错。因此,引入了自动发现和采集资产配置信息的功能,针对不同的对象,可以通过撰写脚本插件的方式拓展自动发现的支持的模型

step1:创建插件

路径:管理-系统管理-插件管理

针对不同的对象,可以通过撰写脚本插件的方式拓展自动发现的支持的模型

新建插件需要填写的信息如下

插件名称:自定义,便于识别
采集模型:选择需要采集的模型,可以自动发现该资产的相关信息
插件类型:目前只支持“脚本”类
采集关联:采集到的该资产的关联关系,脚本执行完后,可以自动创建关联
操作系统:支持Windows和linux两类,以及对应的脚本撰写的语言
脚本内容:定义脚本执行的参数、脚本采集的内容、输出格式等信息,详见下方详细介绍
参数定义:在脚本执行过程中需要输入的参数,采用位置参数的形式,$1、$2确定位置

采集脚本的编写内容主要包括:

1、脚本参数:脚本支持定义位置参数,如shell脚本通过$1、$2定义。在脚本内容中的定义的参数需同时在“参数定义”中定义好,以便创建采集任务时填写和传入参数.

2、脚本采集内容:采集信息需要执行的命令.

3、脚本输出格式:为了在CMDB中存储,需要对输出的格式进行规范化,以便WeOps识别和存储。输出格式的定义可查看如下示例,其中 bk_inst_name、bk_obj_id是必填项,bk_inst_name作为示例的唯一值,通过实例名,将输出的字段信息更新到CMDB中, bk_obj_id则是该采集对象的资产模型ID。

4、关联关系:如果该资产模型是与主机相关联,直接在页面上填充字段“采集关联”即可,脚本中不必特殊定义。执行脚本后,可以自动采集并关联对应的主机。

Shell示例

以Shell脚本为例,发现Apache的实例和对应信息,定义输出格式的示例如下:

#!/bin/bash
bk_host_innerip={{bk_host_innerip}}
...
# =============can extend key=================
json_template='{ "bk_inst_name": "%s-apache-%s", "bk_obj_id": "apache", "ip_addr": "%s", "listen_port": "%s", "httpd_path": "%s", "version": "%s", "doc_root": "%s" }'
json_string=$(printf "$json_template" "$bk_host_innerip" "$port_str" "$bk_host_innerip" "$port_str" "$exe_path" "$apache_version" "$document_root")
echo "$json_string"
...

json_template='{ "bk_inst_name": "%s-apache-%s", "bk_obj_id": "apache", "ip_addr": "%s", "listen_port": "%s", "httpd_path": "%s", "version": "%s", "doc_root": "%s" }'···定义了一个JSON模板字符串,其中的占位符(例如%s)将被具体的变量值替换。该模板包含以下字段: ●bk_inst_name: 实例名称,格式为 "主机内网IP-apache-端口号",必填,可自行用采集字段拼接 ●bk_obj_id: 固定值 "apache",必填,根据采集的模型定义 ●ip_addr: 主机内网IP,根据发现字段自定义 ●listen_port: 监听端口,根据发现字段自定义 ●httpd_path: Apache可执行文件路径,根据发现字段自定义 ●version: Apache版本,根据发现字段自定义 ●doc_root: 文档根目录,根据发现字段自定义

json_string=$(printf "$json_template" "$bk_host_innerip" "$port_str" "$bk_host_innerip" "$port_str" "$exe_path" "$apache_version" "$document_root")使用printf命令将模板字符串中的占位符替换为实际的变量值,具体替换如下: ● "$bk_host_innerip": 主机内网IP。 ●"$port_str": 端口号。 ●"$exe_path": Apache可执行文件路径。 ●"$apache_version": Apache版本。 ●"$document_root": 文档根目录。 最终生成一个完整的JSON字符串,并将其赋值给json_string变量。

echo "$json_string"输出生成的JSON字符串。

PowerShell示例

以PowerShell脚本为例,发现Apache的实例和对应信息,定义输出格式的示例如下:

  ...
foreach ( $httpd_instance in $httpd_instance_list){
...
$output = @{
"version" = $httpd_version.trim()
"listen_port" = $httpd_port
"ip_addr" = "{{bk_host_innerip}}"
"documentroot" = $httpd_DocRoot
"httpd_root" = $httpd_root
"errorlog" = $error_log
"customlog" = $custom_Log
"include" = $httpd_include
"httpd_conf_path" = $httpd_confile
"httpd_path" = $httpd_path
"bk_inst_name" = "apache-{{bk_host_innerip}}-$httpd_port"
"bk_obj_id" = "apache"
}
$outputJson = ConvertTo-Json $output
Write-Output $outputJson
}
...

$output = @{ ... }定义了一个哈希表$output,其中包含多个键值对,每个键值对对应Apache服务的一个配置信息字段。 ●"version" = $httpd_version.trim(): Apache版本,去除空白字符后存储。 ●"listen_port" = $httpd_port: 监听端口。 ●"ip_addr" = "{{bk_host_innerip}}": 主机内网IP,使用占位符表示。 ●"documentroot" = $httpd_DocRoot: 文档根目录。 ●"httpd_root" = $httpd_root: Apache根目录。 ●"errorlog" = $error_log: 错误日志路径。 ●"customlog" = $custom_Log: 自定义日志路径。 ●"include" = $httpd_include: 包含的配置文件路径。 ●"httpd_conf_path" = $httpd_confile: Apache配置文件路径。 ●"httpd_path" = $httpd_path: Apache可执行文件路径。 ●"bk_inst_name" = "apache-{{bk_host_innerip}}-$httpd_port": 实例名称,格式为 "apache-主机内网IP-端口号",必填,可自行用采集字段拼接 ●"bk_obj_id" = "apache": 固定值 "apache",必填,根据采集的模型定义

$outputJson = ConvertTo-Json $output使用ConvertTo-Json命令将哈希表$output转换为JSON格式,并将结果赋值给变量$outputJson。 Write-Output $outputJson输出转换后的JSON字符串。

通过上述定义后,执行脚本可得到对应的结果,输出结果示例如下。可按照如下结果保存在CMDB中。

{
"bk_inst_name": "abcsql-1",
"bk_obj_id": "abcsql",
"ip_addr": "10.10.10.10",
"version": "6.7"
}
{
"bk_inst_name": "abcsql-2",
"bk_obj_id": "abcsql",
"ip_addr": "10.10.10.11",
"version": "6.8"
}

step2:创建采集任务

路径:管理-资产管理-配置采集

通过配置采集页面左侧,找到需要采集的类型(Kubernetes、网络设备、数据库、云平台、SSL证书、配置文件等)。通过右侧按钮创建并配置采集任务,可以使用刚才创建的脚本插件进行采集。

支持通过配置录入方式选择自动录入或审批录入,其中自动录入为当任务执行后发现新的资产,自动录入到CMDB,审批录入则需要人工在页面审批后录入资产。任务执行过程中,支持手动终止该任务。

step3:采集结果

路径:资产-资产目录-对应资产

采集任务执行后,可以在任务列表中的采集摘要中查看任务的采集情况。

任务详情:展示任务执行后资产新增、更新和下架等情况,具体说明如下

新增资产:通过对比实例名识别出的新增资产,可自动/审批录入至CMDB
资产更新:通过对比实例名识别出的已有资产,自动更新该资产的配置信息
新增关联:该任务采集到的资产之间新的关联关系数,若任务为审批录入,则需审批录入后再执行采集任务补充关联关系
下架资产:通过对比该采集任务以往录入的实例识别出已经下架的资产,需要手动确认,才会在CMDB删除

资产记录更新:当任务执行完成后,或者通过手动审批/手动下架后,“资产记录”会更新到最新的资产列表、资产字段值、资产关联关系,并用字段“上次更新时间”、“是否自动发现“和”采集任务“标识本次自动更新的信息。