1. 为啥要使用cmdb?
因为现在统计资产,使用的是Excel表格,资产变更的时候在上面记录一下
但是随着业务的增加,Excel表越来越乱, 到后面就没法看了
最致命的问题是:
有些人不遵守这个规则, 在某台服务器上插了硬盘他不去记录
所以这时候excel表没法用了
目标:
让所有的资产收集全部自动化
2. cmdb四种采集方案?(重点是在前三)
详细: https://www.jianshu.com/p/50f5b0ac8a90
1. agent
在各个服务器部署用python代码写的agent脚本
脚本内容:
通过subprocess模块执行命令拿到结果, 通过requests模块返回给API
定时执行这个脚本
适用于服务器多的公司
优: 快
缺: 每加一台新的服务器都需要部署脚本
2. ssh(paramiko模块)
中控机上的paramiko通过ssh登录到服务器,
发送命令给服务器执行,拿到结果,通过requests模块发送给API
适用于服务器不是很多的公司
优:不用部署脚本
缺:慢
3. salt-stack
有一个中控机,装salt-master,各个服务器装salt-minion
中控机通过master发送命令给服务器执行, 拿到结果,通过requests模块发送给API
适用于之前已经在用salt-stack的公司
优:不用部署脚本,快
缺:依赖第三方软件
3. 分块
一共分为三块
1. 数据采集: 服务器数据到API这部分
2. 写数据: API到数据库
3. 展示: 通过Django将数据库数据展示给页面
4. 开发过程中遇到的困难:
技术问题:
salt.client模块只能在py2上跑
采用了subprocess模块发送salt 'c2.salt.com' cmd.run 'ifconfig'这种命令
不过技术问题都不叫问题, 都能百度或谷歌到, 业务问题才是比较麻烦的
业务问题:
问题一: 唯一索引问题
问题描述: 之前用的唯一索引是SN号, 但是开虚拟机的话, 虚拟机与实体机SN号相同
解决方法: 用主机名作为唯一索引,
前提条件: 流程必须规范化, 主机名不能随意改变`不能重复
问题二: agent模式下, 主机名需要改变
问题描述: 某项业务确实需要改变主机号, 时间正好卡在agent脚本执行时
解决方法: 在第一次执行脚本时将主机名写入文件, 以后的主机名以文件中的为准
API的验证
client加密方式:
MD5(设定的字符串+时间戳)|时间戳
server验证:
截取token的时间戳,用设定的字符串+时间戳MD5加密,与传过来的对比
验证token是否过期,10秒
防止拿十年前的token
比对token
防止伪造
另外对数据进行了AES加密
验证token是否使用过
防止黑客在十秒内拿到token并发送请求
验证通过后将token存入Redis,过期时间十秒
特点
可插拔式的
模仿Django的中间件, 不想搜集磁盘信息就注掉,想收集就加上
三种方案都可以实现,通过配置文件自由切换
![](https://img.haomeiwen.com/i13223341/a0e3402c377cee3d.png)
网友评论