跳到主要内容

自动发现

提示

自动发现正如其字面意思,就是自动的去发现各种各样的运维资源,资源的变更能及时的反馈到CMDB里,降低了人力维护数据的成本。
自动发现的建设一般分为3步: 创建自动发现规则、模型关联自动发现规则、执行自动发现。接下来我们对这3步进行简要的阐述。

创建自动发现规则

请通过“后台管理/自动发现”进入自动发现规则配置页面。

new_custom_plugin

维易开源CMDB的自动发现规则主要包括3大类:

内置插件和自定义插件

内置插件是把物理机、虚拟机、硬盘、网卡的发现内置到了OneAgent(注:维易统一运维探针OneAgent,可在官网免费申请https://veops.cn)里。点开内置插件的自动发现规则,呈现的是采集的属性列表,如下图所示:

auto_discovery01

自定义插件实际上是可以实现其他所有采集需求的,比如MySQL、Nginx、Tomcat等常用的一些软件自动发现,实现一个自定义的插件很简单,就是一段python脚本:

create_plugin
# -*- coding:utf-8 -*-

import json


class AutoDiscovery(object):

@property
def unique_key(self):
"""

:return: 返回唯一属性的名字
"""
return

@staticmethod
def attributes():
"""
定义属性字段
:return: 返回属性字段列表, 列表项是(名称, 类型, 描述), 名称必须是英文
类型: String Integer Float Date DateTime Time JSON
例如:
return [
("ci_type", "String", "模型名称"),
("private_ip", "String", "内网IP, 多值逗号分隔")
]
"""
return []

@staticmethod
def run():
"""
执行入口, 返回采集的属性值
:return: 返回一个列表, 列表项是字典, 字典key是属性名称, value是属性值
例如:
return [dict(ci_type="server", private_ip="192.168.1.1")]
"""
return []


if __name__ == "__main__":
result = AutoDiscovery().run()
if isinstance(result, list):
print("AutoDiscovery::Result::{}".format(json.dumps(result)))
else:
print("ERROR: 采集返回必须是列表")
信息

采集的属性必须包含模型的唯一属性,否则无法完成入库。

网络设备的自动发现

这个发现能力同样内置在OneAgent里,通过SNMP等网络协议去采集网络设备,目前实现的主要包括交换机、路由器、防火墙、打印机

auto_discovery02

公有云、私有云资源的发现

信息

公有云、私有云资源的自动发现为企业版功能。

通过对接云厂商的开放API,主动定时轮训的方式去获取云资源,目前集成了阿里云、腾讯云、华为云、AWS、VCenter、KVM等云主机的自动发现,后续会扩充云资源的发现。当然如果本身在云主机上部署了OneAgent,实际上也是可以用内置的虚拟机的自动发现插件来进行采集。

公有云AccessKey配置

如下图所示,可以统一配置管理公有云AccessKey,

AccessKey

VCenter账号配置

如下图所示,可以统一配置管理VCenter 账号,

VCenter_account

模型关联自动发现规则

模型属性自动发现

首先打开菜单 【模型配置】,进入到模型(如网卡)的“自动发现”页面,点击“添加”按钮,在弹出的自动发现规则列表中选择“网卡”自动发现规则,并点击“确定”按钮提交,即可将模型关联自动发现规则。

add_auto_rule
auto_rules

以网卡为例进行说明,主要包括属性映射执行配置:
1) 属性映射
关联上内置的网卡自动发现规则后,模型的属性名和自动发现规则的属性名会进行自动匹配,如果名字不一样则需要人工来匹配。实际上每个模型可以应用多个自动发现规则,每个规则里可能采集了模型的部分属性。

property_mapping

2) 执行配置 首先指定自动发现规则执行的目标机器,可以的选项有:

  1. Master机器:安装OneMaster的所在机器
信息

master机器不支持发现服务器类的数据如物理机、虚拟机、网卡、硬盘等。

  1. 所有节点:比如物理机、虚拟机等,但是必须管理员才能配置为所有节点。
  2. 具体的某个节点:比如公有云资源的自动发现或者网络设备的自动发现,都是指定具体的某个节点去执行的。
  3. 从CMDB里选择:比如网卡,可以选择CMDB里所有的物理机去执行。
auto_discovery03

其次可选择是否自动入库,一般来说自动发现的准确率如果接近100%,那么可以直接选择自动入库,即自动发现的实例会直接入库为CI。如果选择不自动入库,实例会先进入自动发现资源池,然后需要人工批量入库为CI。

3) 采集频率 用户可自行配置采集频率,支持cron设置,如下图所示:

collection_frequency

4) 公有云AccessKey 如果关联了公有云自动发现规则,需要填写公有云的AccessKey:

AccessKey01

如上图所示,除了自定义输入key、secret外,还支持从已有配置中选择,可以通过上文公有云AccessKey配置管理已有配置:

AccessKey02

5) VCenter vSphere API配置 如果关联了 VCenter自动发现规则,需要填写vSphere API配置:

sphere_api01

如上图所示,除了自定义输入外,还支持从已有配置中选择,可以通过上文VCenter账号配置管理已有配置:

sphere_api02

6) 健康检查

信息

查看发现规则在执行机器上的同步状态,系统每5分钟同步一次,若状态为异常,可查看可能的问题

可通过点击“执行机器同步规则检查”,来查看Agent是否在线:

health_check

如果Agent状态为下线,请按以下操作检查Agent:

  1. 检查OneAgent进程是否存活
  2. 查看OneAgent的日志,每5分钟有自动发现规则同步的日志

关系自动发现

信息
  1. 关系自动发现的前提是配置有属性自动发现
  2. 当自动发现属性值与关联模型属性值一致时,两实例模型则自动关联
  3. 如果自动发现的属性值是列表,则会和关联模型建立多个关系。如自动发现属性值为[1,2,3],采集数据入库成CI后便会和关联模型属性值为1、2、3的CI分别都自动建立关联。

关系自动发现支持多属性, 即可和多个模型自动构建关系。

auto_relation

如上图所示,左侧可选择自动发现属性列表(自动发现属性列表来源于已保存的属性自动发现规则),右侧可配置关联模型属性。点击右侧按钮“+”即可配置多个关系自动发现规则。
以网卡为例进行说明:如下图所示,只需配置网卡采集的属性sn(物理机的序列号,实际上对网卡模型来说是冗余字段)和物理机模型的序列号建立关系即可,当采集上来的网卡入库CMDB时,会用字段来建立和物理机之间的关系

auto_discovery04

执行自动发现

模型关联好自动发现规则之后,OneAgent会自动定时同步其所在节点的自动发现规则,然后执行自动发现规则,如果采集的数据和上一次采集有异同,则推送数据到服务端。
自动发现采集到的数据将会展示在自动发现池中,点击并进入系统左侧菜单“自动发现池”,然后点击关联了自动发现规则的模型(如网卡),即可在左侧表格中查看到自动采集的数据,如下图所示:

auto_discovery_pool

在自动发现池中,页面顶部展示了一些统计字段,如规则数(当前模型所配置的属性自动发现规则和关系自动发现规则的总数)、执行机器数、自动发现资源数、入库数、本周新增、本月新增等。页面下方以表格形式展示了自动发现的所有资源详情,除了可以查看属性详情、是否入库、入库时间、入库人等字段外,用户还可以进行入库单个数据、批量入库成CI的操作。
点击右上角的“日志”按钮,即可查看到采集报错信息,新增、删除和入库资源的时间等信息。

auto_log

针对未开启自动入库的数据,在自动发现池中,用户可以对未入库数据手动批量入库成为CI实例。

实例演示:通过自定义插件完成数据的自动发现

接下来通过一个自定义插件的自动发现规则来演示维易CMDB自动发现数据的全过程。

1. 创建自定义插件

请通过“后台管理/自动发现”进入自动发现规则配置页面。

new_custom_plugin

点击插件下方“+”图标,进入到新增插件页面,填写名称、图标,模式选择“plugin”,采集设置提供了一段python示例代码。
模板中的AutoDiscovery类中有三个方法分别是:unique_keyattributesrun。我们需要按照模板中约定的格式将所需数据通过return进行返回。

# -*- coding:utf-8 -*-

import json


class AutoDiscovery(object):

@property
def unique_key(self):
"""

:return: Returns the name of a unique attribute
"""
return 'instance_id'

@staticmethod
def attributes():
"""
Define attribute fields
:return: Returns a list of attribute fields. The list items are (name, type, description). The name must be in English.
type: String Integer Float Date DateTime Time JSON
For example:
return [
("ci_type", "String", "CIType name"),
("private_ip", "String", "Internal IP, multiple values separated by commas")
]
"""
return [
("instance_id", "String", "实例ID"),
("private_ip", "String", "内网IP"),
]

@staticmethod
def run():
"""
Execution entry, returns collected attribute values
:return:
Returns a list, the list item is a dictionary, the dictionary key is the attribute name, and the value is the attribute value
For example:
return [dict(ci_type="server", private_ip="192.168.1.1")]
"""
return [
dict(instance_id="cmdb_ui", private_ip="192.168.1.1"),
dict(instance_id="cmdb_api", private_ip="192.168.1.2"),
dict(instance_id="cmdb_db", private_ip="192.168.1.3")
]



if __name__ == "__main__":
result = AutoDiscovery().run()
if isinstance(result, list):
print("AutoDiscovery::Result::{}".format(json.dumps(result)))
else:
print("ERROR: The collection return must be a list")

按照上方示例将python采集代码填写完成后,点击按钮“更新字段”,脚本中attributes方法返回的属性列表会被展示在下方表格中。如下图所示:

auto_plugin

点击“保存”,成功新建自定义插件。如上图所示,我们新建了一个名为“docker”的自定义插件。

2. 模型关联自定义插件

用户打开菜单“模型配置”,选中模型(如docker),打开tab页“自动发现”,通过“添加”按钮,将自定义插件docker与模型关联。

add_auto_rule02
add_docker_rule
add_docker_rule02

可参考上文模型属性自动发现完成执行配置的填写。最后点击“保存”按钮。便完成了模型docker与自定义插件docker的关联,OneAgent会自动按照采集频率同步其所在节点的自动发现规则。

3. 配置关系自动发现规则

按照上一步保存了属性自动发现后,切换到tab页“关系自动发现”,配置关系自动发现规则,如下图所示:自动发现属性我们选择了“private_ip”,关联模型属性则是选择了物理机的属性“private_ip”

auto_relation_demo

点击保存即可完成关系自动发现的配置。当自动发现资源的private_ip属性值与物理机实例中private_ip属性值一致时,便会自动完成关联。

4. 查看自动发现采集数据

点击并进入系统左侧菜单“自动发现池”,选中模型(如docker),即可在右侧表格中查看到自动采集的数据,如下图所示:

entry_ci