一、CMDB架构
1.agent实现方案
实现步骤: 1.每个服务器都放一个脚本(agent脚本),使用python的subprocess模块执行linux相关的命令
2.将每个服务器获取到的数据通过requests.post传给一个API端(django服务端)
3.在API端对数据进行二次清洗,然后放入数据库中
4.Django搭建的web后台接收前端请求,从数据库中请求数据,通过web界面展现给用户
注意:GET和POST请求中的数据,都是从body中获取的
如果头信息:content-type:application/www-form-urlencoded 此时body就会将数据赋值给POST (表单提交的头部信息就是这个)
此时头信息:content-type:application/json 所以需要从body中获取信息
crontab服务(循环执行定时任务)
缺点:需要在每一个服务器都布置agent脚本
2.ssh实现方案(基于Paramiko模块) ansible软件
在中控机服务器通过Paramiko(py模块)登录到各个服务器上,然后执行相关的linux命令的去获取各个服务器上的信息,主要是在中控机中写代码
和第一种方式只是采集方式不一样,其他步骤都是差不多,两者通过不同的配置文件来实现不同的采集方式。网上还有其他方式实现,自行百度。
二、CMDB项目目录结构设计
采集端: autoclient是运行的代码文件
autoserver是web可视化页面
-bin --start.py 启动文件 -conf --config.py 自定制配置文件(类似于Django的settings.py文件) -lib 库文件 --conf --conf.py 整合两个配置文件的所有配置信息 --gloab_settings.py 高级配置信息 -src 核心文件 --plugins --__init__.py 管理采集的插件 --basic.py
三、高级配置文件(参考Django的global_settings(默认配置)和settings(自定制配置))
整合两个配置文件的所有配置信息
from conf import config #### 自定制 from . import gloab_settings #### 高级的 #整合两个配置文件的所有配置信息 class Settings(): def __init__(self): #整合高级的配置信息 for key in dir(gloab_settings): if key.isupper(): v = getattr(gloab_settings, key) setattr(self, key, v) #整合自定制配置文件
#为什么放在高级配置文件的下面,如果两个配置文件信息重复的话 for key in dir(config): if key.isupper(): v = getattr(config, key) setattr(self, key, v) settings = Settings()
实现方法:参考Django插拔式
四、插件采集实现方式:
1.写一个父类base 所有的采集子类继承父类base
2.将采集的函数作为参数传入