大数据-数据建行之自动化资产数据采集
优采云 发布时间: 2020-08-13 19:01
很多公司在做自动化运维平台前就会先做一个CMDB,做CMDB的第一步就是建模和采集数据。说到采集数据,为了防止过多人工介入造成数据准确率低,采集方法普遍分为两种:
一小部份静态数据人工录入
大部分数据用程序采集
第二部份,不同的公司有的用shell实现一套,有的公司拿脚本语言实现一套,有的公司在须要的时侯主动搜集一次,有的公司手动定期搜集。
汽车之家的方式是“Puppet Facter脚本”+“定期手动搜集”。并且我们早已将其开源在Github(Assets_Report)上跟你们分享。
下面我们详尽解说一下原理和使用方式。
二、原理介绍
众所周知,Puppet是一套配置管理工具,是一个Client/Server模式的构架,可以用它来管理软件、配置文件和Service。然后,Puppet生态圈里有个叫Facter的工具,运行在Agent端,可以和Puppet紧密配合完成数据采集的工作。但是Facter提供采集的数据虽然有限,一些愈发底层的硬件数据就没有采集,而这种数据也是我们所须要的,这就是我们开发本工具的动机。
虽然Facter采集的数据有限,但是Facter本身是一个挺好的框架,非常容易对其进行扩充,所以我们基于Facter进行了扩充,配合Puppet Master的Report Processor将采集的结果上报给AutoBank(这是车辆之家的CMDB代号,可以参考《运维的数据建行-构建CMDB方式》),由此来完成一个完整的采集逻辑。
这是Puppet的Server跟Agent之间的工作流程图
Agent在发送Request恳求Catalog的阶段,会将自身的facts都上报给Master。而Master接到数据后可以借助自身的Report Processor对其进行二次处理,例如转发到别处。
正是基于上述的原理,我们开发了自己的Report Processor:assets_report,通过HTTP协议将facts post给AutoBank的http插口使其入库。
对开发custom facts感兴趣的朋友可以参考 fact_overview 和 custom facts。
如上所述,我们的Assets_Report项目收录了如下两个组件来实现整个逻辑
assets_report模块:一个纯Puppet Module,内建了一个Report Processor和一些自定义Facter插件,部署在Master端。
Report Processor运行在Master端。
Facter插件会通过Master下发到Agent端并被运行以采集本机资产数据
api_server:负责接收资产数据并将其入库
三、采集插件的功能介绍
相对于Facter内建的facts,本插件提供了更多的硬件数据,例如
CPU个数,型号
内存容量,序列号,厂商,插槽位置
网卡上绑定的ip,掩码,mac,型号,且支持一个网卡上绑定多ip的场景
RAID卡个数,型号,内存容量,RAID Level
磁盘个数,容量,序列号,厂商,所属RAID卡,插槽位置
操作系统类型,版本
服务器厂商,SN
高级特点:为了防止大段相同数据重复上报,减轻AutoBank的数据库压力,本插件具备Cache功能,即假如一台服务器的资产数据没有发生变更,那么只会汇报not_modify标记。
本插件支持的操作系统有(系统必须是64位的,因为本插件中的采集工具是64位的)
CentOS-6
CentOS-7
Windows 2008 R2
本插件支持的服务器有
HP
DELL
CISCO
四、采集插件的安装方式
安装操作在Puppet Master端进行。
假定你的模块目录为/etc/puppet/modules
cd ~git clone :AutohomeOps/Assets_Report.gitcp -r Assets_Report/assets_report /etc/puppet/modules/
在你自己的puppet.conf(假设默认路径是/etc/puppet/puppet.conf)中添加
reports = assets_report
然后在site.pp中添加如下配置,让所有Node都安装assets_report模块
node default { # include assets_report class {'assets_report': }}
配置完毕后,采集工具会被手动下发到Agent上进行安装。下一次Puppet Agent运行时本插件即可正常工作。
五、汇报组件的配置方式
配置操作在Puppet Master端进行。
配置文件为 assets_report/lib/puppet/reports/report_setting.yaml
参数
含义
示例
report_url汇报插口地址,可更改成你自己的url
auth_required插口是否收录验证true/false,默认为false,验证代码须要在auth.rb中自己实现
user验证用户名假如auth_required为true,需要填写
passwd验证密码假如auth_required为true,需要填写
enable_cache是否启用cache功能true/false, 默认为false
六、汇报插口服务的配置方式
配置操作在Puppet Master端进行。
本插口服务api_server基于一个Python编撰的Web框架Django开发,该组件收录了数据库设计和http api的实现。因为各家公司的数据库设计均不一致,该项目仅实现了最简单的数据建模,所以该组件的存在仅作为Demo,不可用于生产环境,读者需注意。
首先,我们须要安装一些依赖。这里假设你的OS为CentOS/RedHat
$ cd ~/Assets_Report/api_server安装pip,用它来安装python模块$ sudo yum install python-pip安装python模块依赖$ pip install -r requirements.txt
初始化数据库,可以参考 Django用户指南
$ python manage.py makemigrations apis$ python manage.py migrate数据库为当前目录下的db.sqlite3