CMDB 资产采集——插件可插拔式、可拓展思想

功能描述

每个资产采集的插件都是一个独立的py脚本统一放在一个目录下,所有插件的路径统一配置在settings.py 配置文件中,以字典形式配置。通过for 循环字典中插件逐个执行插件采集数据。增加新的插件时编写脚本放入,在配置文件中增加响应路径配置,当有些数据不需要采集时注释掉settings.py中配置即可。此为可插拔、可拓展方式。

config/settings.py 配置文件中插件注册配置

PLUGIN_DICT = {
    ‘disk‘:‘src.plugins.disk.Disk‘,                 #对应value 为采集disk 的类的路径
    ‘memory‘:‘src.plugins.memory.Memory‘,
    ‘network‘:‘src.plugins.network.Network‘,
}

启动资产采集项目后根据配置文件上配置的采集模式,执行响应模式引擎的脚本,这里以agent /ssh 模式为例

src/engin/agent.py

from .base import BaseHandler
from ..plugins import get_server_info
class AgentHandler(BaseHandler):

    def cmd(self,command,hostname=None):
        import subprocess
        return subprocess.getoutput(command)        #command 为资产采集的命令例如内存采集“free -m”,采集后的数据通过getouput 收集

    def handler(self):
        """
        处理Agent模式下的资产采集:网卡、内存、硬盘
        :return:
        """
        # 通过调用get_server_info获取所有的资产信息:网卡、内存、硬盘,把AgentHandler 类通过self 作为参数传递给get_server_info最终传递给资产采集插件
        info = get_server_info(self)
        print(‘agent‘,info)

src/engin/ssh.py  ssh 模式下代码

from config import settings
from .base import BaseHandler
from ..plugins import get_server_info

class SSHHandler(BaseHandler):
    #cmd 函数为ssh 模式的远程登录命令,需要远程登录的主机名与登陆后执行的命令作为参数
    def cmd(self, command, hostname=None):
        """
        调用paramiko远程连接主机并执行命令,依赖rsa
        :param hostname:主机名
        :param command: 要执行的命令
        :return:
        """
        import paramiko

        private_key = paramiko.RSAKey.from_private_key_file(settings.SSH_PRIVATE_KEY)
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(hostname=hostname, port=settings.SSH_PORT, username=settings.SSH_USER, pkey=private_key)
        stdin, stdout, stderr = ssh.exec_command(command)
        result = stdout.read()
        ssh.close()
        return result
    #
    def handler(self):
        """
        处理SSH模式下的资产采集
        :return:
        """
        print(‘ssh模式‘,get_server_info(self))

src/plugins/__init__.py  get_server_info 函数循环资产采集插件字典,逐个执行插件采集数据存入字典并返回信息

from config import settings
from lib.module_string import import_string

def get_server_info(handler,hostname=None):                 #hostname=None 默认为空,传递参数时可以不传递,也不会报错
    """
    循环所有的插件,获取所有的资产信息,然后返回
    :param handler:
    :return:
    """
    info = {}
    for name,path in settings.PLUGIN_DICT.items():
        cls = import_string(path)                           #import_string 为通过importlib getattr 导入类的函数
        obj = cls()
        # obj 为资产采集插件,每个插件都有一个process 方法进行资产采集;handler 为AgentHandler/SSHHandler类
        result = obj.process(handler,hostname)
        info[name] = result                                 #{‘disk‘:100G,‘memory‘:16G,‘network‘:xxxxxx}

    return info

src/plugins/disk.py  memory.py    资产采集插件

class Disk(object):
    def process(self,handler,hostname):
        """
        获取硬盘信息
        :return:
        """
        result = handler.cmd(‘dir‘,hostname)    #handler 为模式引擎的类AgentHandler/SaltHandler
        return result

class Memory(object):
    def process(self, handler, hostname):
        """
        获取内存信息
        :return:
        """
        result = handler.cmd(‘wmic memorychip‘, hostname)   #handler 为模式引擎的类AgentHandler/SaltHandler
        return result

代码逻辑调用解析

模式引擎类 AgentHandler/SaltHandler 中定义了两个方法1、函数cmd 为各个模式资产采集命令执行前的登录等前期操作 2、函数handler 为调用 get_server_info(self) ,通过get_server_info 读取配置文件中插件注册信息,for 循环逐个执行插件,采集信息以字典形式返回。通过 self 参数把AgentHandler等类在get_server_info 调用disk.py 插件时传递给disk.py 中的process 函数.在执行每个插件时,每个插件的process中都是通过handler 接收AgentHandler 等类,在执行类中的远程登录函数,远程等候后执行信息查询命令。

原文地址:https://www.cnblogs.com/fanggege/p/10263623.html

时间: 2024-10-03 13:38:43

CMDB 资产采集——插件可插拔式、可拓展思想的相关文章

CMDB资产采集的四种方式

资产采集的概念 资产采集的四种方式:Agent.SSH.saltstack.puppet 资产采集 Configuration Management Database 简称CMDB,CMDB存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧密相联,支持这些流程的运转.发挥配置信息的价值,同时依赖于相关流程保证数据的准确性.CMDB可以实现高度的自动化,减少人为错误的发生.降低人员成本,CMDB是实现运维自动化的基础. Agent方式 程序:放置在每台服务器 应用场景:

CMDB资产采集

Agent(方式) 1:服务器每台都需要安装Agent 达到采集速度快,简单:造成性能损耗 获取每台服务器的资产并有返回值:v=subprocess.getoutput('dir')或者ipconfig 返回给api api在进行入库 (api 1.url 2.指定发送数据格式 3.并有返回值给客户端) 2:应用场景:服务较多的公司 客户端: import subprocess v1=subprocess.getoutput('ipconfig') # print(v1) value1=v1[2

CMDB资产采集方式

一:Agent方式 原理:在每台服务器装上agent客户端程序,定时向数据库发送指定的资产信息. 优点:速度快. 缺点:服务器上需要多装一个软件 1 import subprocess 2 import requests 3 # pip3 install requests 4 5 # ################## 采集数据 ################## 6 # result = subprocess.getoutput('ipconfig') 7 # result正则处理获取想要

CMDB资产采集方式之agent

CMDB是运维自动化基础 CMDB介绍:www.cnblogs.com/wupeiqi/articles/6192986.html 原文地址:https://www.cnblogs.com/jintian/p/11267265.html

CMDB资产采集功能实现之saltstack

原文地址:https://www.cnblogs.com/jintian/p/11267302.html

CMDB资产采集方式之puppet

原文地址:https://www.cnblogs.com/jintian/p/11267279.html

CMDB资产采集方式之ssh

原文地址:https://www.cnblogs.com/jintian/p/11267268.html

CMDB资产采集方式之saltstack

原文地址:https://www.cnblogs.com/jintian/p/11267270.html

CMDB资产采集插件开发

self是谁的对象,就优先在谁的类找方法 原文地址:https://www.cnblogs.com/jintian/p/11267315.html