CMDB发布系统2.监控3.配管系统、装机4.堡垒机CMDB目的

优采云 发布时间: 2021-08-18 07:02

  CMDB发布系统2.监控3.配管系统、装机4.堡垒机CMDB目的

  CMDB-配置管理数据库资产管理

  自动化相关平台(基本CMDB):

  1.发布系统

  2.监控

  3. 管道系统,安装

  4.堡垒机

  CMDB 的目的:

  1.替换EXCEL资产管理-不准资产

  2.与监控系统联动

  3.自动安装

  预期:资产管理

  实现原理:

  1.代理多机器时

  2.ssh

  3.盐

  实现三种模式兼容,可扩展性

  基本结构:

  1. Asset采集 的代码

  2. API

  3.管理平台

  ################

  今天的目标:

  资产采集:

  - Asset采集code

  Python 脚本

  - api

  姜戈

  创建项目:

  资产采集

  auto_client:

  代理模式:

  1.采集资产信息

  2.使用requests模块发送POST请求,将提交的资产信息提交给api持久化

  ssh 模式:

  1. 获取不是采集 的主机列表

  2.远程连接(ssh)指定主机,执行命名采集asset信息

  3. 使用requests模块发送POST请求提交资产信息

  盐模式:

  1. 获取不是采集 的主机列表

  2.远程连接(salt)指定主机,执行命名采集asset信息

  3. 使用requests模块发送POST请求提交资产信息

  知识点:

  1. csrf_exempt 一个视图不需要检查CSRF

  2. requests module data={} Django 中的 url 编码 request.POST

  data = json 字符串 request.POST 没有值——” request.body

  3. 处理错误信息:

  不要使用 e traceback.format_exc() 错误堆栈

  4.唯一ID:

  物理机序列号

  物理机+虚拟机:

  主机名+文件

  规则:

  1. 新机 使用主机名采集 的空文件将信息保存到当前新的文件中

  2. 旧机改主机名,更新文件内容。当前更改和文件名也会更新。

  5.返回值:

  r1.content, 字节

  r1.text,string

  r1.json(),反序列化的结果

  6.线程池:

  从 concurrent.futures 导入 ThreadPoolExecutor

  pool = ThreadPoolExecutor(10)

  对于host_list中的主机:

  pool.submit(task,host)

  7. 遵循的原则:

  开闭原则:

  打开:配置

  关闭:源代码

  #########################################

  一、模块设计,资产采集方法第一种方法是Agent采集

  

  第二种采集 方法使用中间控制机制。在控制机中,先获取没有采集的数据信息列表,然后到服务器去采集

  

  Asset采集Client 目录规划开始。创建项目目录。这是采集目录,直接运行在服务端程序上。

  auto_client 的目录规划

  bin 执行文件,

  config 配置文件,

  lib 公共图书馆,

  src 程序逻辑,

  日志记录

  

  执行入口bin start

  bin

  clinet.py

  import os, sys

sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from src.script import run

if __name__ == '__main__':

run()

  逻辑文件

  

  源代码

  引擎(创建采集目录)

  代理.py

  类 AgnetHandler(object):

  def handler(self):

"""

Agent模式下处理资产采集

:return:

"""

    print('agent模式')

   

   

  盐.py

  class SaltHandler(object):

def handler(self):

"""

Salt模式下处理资产采集

:return:

"""

    print(‘salt模式’)

  ssh.py

  class SSHHandler(object):

def handler(self):

"""

SSH模式下处理资产采集

:return:

"""

    print('SSH模式')

  脚本.py

  from config import setting

from src.engine import agent,salt,ssh

def run():

"""

资产采集入口

:return:

"""

if setting.ENGINE == 'agent':

obj =agent.AgnetHandler()

obj.handler()

elif setting.ENGINE == 'salt':

obj = salt.SaltHandler()

obj.handler()

elif setting.ENGINE == 'ssh':

obj=ssh.SSHHandler()

obj.handler()

else:

print("不支持这个模式采集")

  #这种是简单工厂模式

  做一个可插拔的程序,写在配置文件中,选择使用采集数据的方式

  配置

  settings.py

  ENGINE='agent' #支持agent,salt,SSH数据采集

  ########################上面比较低,下面通过反射实现

  #利用反射的方式,执行采集方法,首先在配置文件写一个字典

  #利用反射执行采集,开发封闭原则

ENGINE_HANDLERS = {

'agent':'src.engine.AgnetHandler',

'salt':'src.engine.SaltHandler',

'ssh':'src.engine.SSHHandler',

}

  脚本.py

  from config import setting

# from src.engine import agent,salt,ssh

import importlib

def run():

"""

资产采集入口

:return:

"""

# if setting.ENGINE == 'agent':

# obj =agent.AgnetHandler()

# obj.handler()

# elif setting.ENGINE == 'salt':

# obj = salt.SaltHandler()

# obj.handler()

# elif setting.ENGINE == 'ssh':

# obj=ssh.SSHHandler()

# obj.handler()

# else:

# print("不支持这个模式采集")

#利用反射的方式,执行采集方法,首先在配置文件写一个字典

engine_path = setting.ENGINE_HANDLERS.get(setting.ENGINE) #拿到采集模式的脚本的执行路径

#'src.engine.agnet.AgnetHandler' 使用rsplit进行右分割,只是分割一次

path,engine_class=engine_path.rsplit('.',maxsplit=1)

#拿到执行模式脚本的类,使用importlib,导入

# print(path,engine_class)

module = importlib.import_module(path)

# print(module,type(module))

obj=getattr(module,engine_class)() #反射并实例化

obj.handler()

  然后就可以将反射写成公共插件了

  在lib中创建一个文件,module.srting.py

  

  import importlib

def import_sting(path):

module_path,engine_class=path.rsplit('.',maxsplit=1)

module = importlib.import_module(module_path)

return getattr(module,engine_class)

  我正在 script.py 中修改

  from config import setting

from lib.module_srting import import_sting

def run():

"""

资产采集入口

:return:

"""

#利用反射的方式,执行采集方法,首先在配置文件写一个字典

engine_path = setting.ENGINE_HANDLERS.get(setting.ENGINE) #拿到采集模式的脚本的执行路径

engine_class = import_sting(engine_path)

obj=engine_class() #反射并实例化

obj.handler()

  所有采集data 方法都受到约束

  

  class BaseHandler(object):

def handler(self):

'''

约束派生类

:return:

'''

raise NotImplementedError('handler() must Implemented han')

  每个方法都必须导入基类才能继承,agent、salt、ssh都必须继承

  from .base import BaseHandler

class AgnetHandler(BaseHandler):

def handler(self):

"""

Agent模式下处理资产采集:硬盘、内存、网卡

:return:

"""

print('agent模式')

#调用pulugins.disk /plugins.momory /plugins.nerwork

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线