Skip to content

AutohomeCorp/Assets_Report

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Assets Report Plugin

简介:本项目是一个Puppet Module,内建了一个Report Processor和一些自定义Facter插件,用来自动采集服务器的资产数据。

一、原理

本插件基于Puppet Facter的Report机制。

概念介绍

  • Puppet是一套配置管理工具,是一个Client/Server模式的架构,可以用它来管理软件、配置文件和Service。

  • Puppet生态圈里有个叫Facter的工具,运行在Agent端,可以和Puppet紧密配合完成数据采集的工作。

puppet report

如上是Puppet Agent和Master的交互逻辑图。

facter插件运行在Agent端,Agent在发送Request请求Catalog的阶段,会将自身的facts都上报给Master。而Master接到数据后可以利用自身的Report Processor对其进行二次处理,例如转发到别处。

基于该原理,我们开发了自己的Report Processor:assets_report,通过HTTP协议将facts post给CMDB,CMDB只需要编写相应的HTTP接口将数据入库。

本包含了如下两个组件来实现整个逻辑

  1. assets_report模块:一个纯Puppet Module,内建了一个Report Processor和一些自定义Facter插件,部署在Master端。
    1. Report Processor运行在Master端。
    2. Facter插件会通过Master下发到Agent端并被运行以采集本机资产数据。
  2. api_server:负责接收资产数据并将其入库

更多内容可参考 数据银行之自动化资产数据采集

二、采集插件特性

相对于Facter内建的facts,本插件提供了更多的硬件数据,例如

  1. CPU个数,型号
  2. 内存容量,序列号,厂商,插槽位置
  3. 网卡上绑定的ip,掩码,mac,型号,且支持一个网卡上绑定多ip的场景
  4. RAID卡个数,型号,内存容量,RAID Level
  5. 磁盘个数,容量,序列号,厂商,所属RAID卡,插槽位置
  6. 操作系统类型,版本
  7. 服务器厂商,SN

高级特性:为了避免大段相同数据重复上报,减轻CMDB的数据库压力,本插件具备Cache功能。即如果一台服务器的资产数据没有发生变更,那么只会汇报not_modify标记。

本插件支持的操作系统有(系统必须是64位的,因为本插件中的采集工具是64位的)

  1. CentOS-6
  2. CentOS-7
  3. Windows 2008 R2

本插件支持的服务器有

  1. HP
  2. DELL
  3. CISCO

三、采集插件安装方法

安装操作在Puppet Master端进行。

因为本插件使用了Facter机制,所以依赖

  1. Ruby
  2. Puppet
  3. Facter

其他工具均自包含在插件里,没有外部依赖。

假定你的Puppet模块目录为/etc/puppet/modules

cd ~
git clone git@github.com:AutohomeOps/Assets_Report.git
cp -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 汇报接口地址 http://localhost/api/v1.0/asset/report/,可修改成你自己的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

启动http api service

$ sudo python manage.py runserver 80
服务将监听localhost的80端口。

Django version 1.10.5, using settings 'api_server.settings'
Starting development server at http://127.0.0.1:80/
Quit the server with CONTROL-C.

六、使用

在Puppet Agent端手动触发

puppet agent -t

或者 puppet agent的daemon自动运行后,数据采集上报的流程就会触发,上面的api server的80端口就会收到一次post请求,数据库里将会看到本次采集的数据。

➜  api_server git:(master) ✗ sqlite3 db.sqlite3
SQLite version 3.14.0 2016-07-26 15:17:14
Enter ".help" for usage hints.
sqlite> .tables
apis_asset                  auth_user_user_permissions
auth_group                  django_admin_log
auth_group_permissions      django_content_type
auth_permission             django_migrations
auth_user                   django_session
auth_user_groups
sqlite> select * from apis_asset;

七、数据格式详解

{
  'os_type' # 操作系统类型
  'os_distribution' # 操作系统发行版本
  'os_release' # 操作系统版本号
  'not_modify' # 本次数据跟上次比是否有变更
  'setuptime' # 系统安装时间
  'sn' # 序列号
  'manufactory' # 服务器制造商
  'productname' # 服务器产品名称 
  'model' # 服务器型号
  'cpu_count' # 物理CPU个数
  'cpu_core_count' # CPU逻辑核数
  'cpu_model' # CPU型号
  'nic_count' # 网卡个数
  'nic' # 网卡的详细参数
  'raid_adaptor_count' # raid卡控制器个数
  'raid_adaptor' # raid卡控制器详细参数
  'raid_type' # raid类型
  'physical_disk_driver' # 物理磁盘详细参数
  'ram_size' # 内存总容量
  'ram_slot' # 内存详细参数
  'certname' # Puppet的certname
}

八、开发和贡献

我们非常欢迎大家参与到开发中来,欢迎提交issue,尤其是Pull Request。

九、支持和社区

QQ群

您可以加入我们的官方开源QQ群452994151进行交流。

Mail

您可以通过autohomeops@autohome.com.cn与我们联系。

Bug提交

如果您发现任何错误或者有任何建议,请在这里提交 https://github.com/AutohomeRadar/Assets-Report/issues

Wiki

https://github.com/AutohomeRadar/Assets-Report/wiki

博客

团队官方博客 http://autohomeops.corpautohome.com

License

本软件遵守Apache许可证授权。有关完整的许可证文本,请参阅顶根目录中的LICENSE文件。

About

A assets report plugin for puppet-master based on Facter

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published