CMDB可插拔式收集资产
1. 收集服务器信息的代码
代码出现的问题:
- 代码重复
a. 可以写一个公共的方法:
b. 可以写一个父类方法
代码要实现: 高内聚 低耦合
需要收集的信息:
- 主板信息 (hostname, sn号) - cpu信息(型号, 几个cpu等) - disk磁盘信息 (大小,几块) - 内存memory信息 - 网卡信息
可插拔式的插件收集上述信息
- 配置文件: PLUGINS_DICT = { 'basic': 'src.plugins.basic.Basic', 'cpu': 'src.plugins.cpu.Cpu', 'disk': 'src.plugins.disk.Disk', 'memory': 'src.plugins.memory.Memory', 'nic': 'src.plugins.nic.Nic', }
插件的两种解决方案:
a. 写一个公共的类
让其他的所有的类取继承Base这个基类
b. 高度进行抽象封装
实现最终方案:
1. 可插拔式的插件
2. 插件的__init__文件进行升级
遇到的问题:
唯一标识问题(这个仅限于第一个agent方案):
问题是: 实体机的SN号和我们虚拟机的sn号,共用一个 解决: 如果公司不采集虚拟机的信息, 可以用SN做唯一标识,来进行更新 else 如果公司要采集虚拟机的信息, sn号此时不能使用
我们应该制定标准流程:
第一次录入主机名和资产信息是唯一的
- 服务器放置的机房,机架,几层 - 设置每台服务器的主机名
db:
第一次采集数据:
hostname: c1.com disk: 128G
第N天提交数据:
hostname: c111.com disk: 256G
解决方案:
将第一次采集的主机名写入到文件中,此后永远以文件中的主机名为准
使用进程池和线程池解决并发的问题,提高效率:
from concurrent.futures import ThreadPoolExecutor p = ThreadPoolExecutor(10) for hostname in hostnames: p.submit(self.run, hostname)

1.服务端API验证:
第一关:设置超时时间
第二关:通过MD5验证TOKEN是否被修改
第三关:验证是否重复,(维护了一个列表,防止列表过大,可以删除一些超时的key)
ps:为了再次防止安全性问题,使用AES加密数据
2.服务器表的设计:



浙公网安备 33010602011771号