CMDB运维(一)——CMDB架构(实现方案)、项目目录结构设计、高级配置文件、插件采集实现方式

一、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.将采集的函数作为参数传入

原文地址:https://www.cnblogs.com/wangcuican/p/12206075.html