CMDB学习之二数据采集

 

首先也要调用插件的方式,来写采集数据插件,在src目录下创建一个插件 plugins ,然后在plugins下创建disk.py ,memory.py, network.py等等

  src

    plugins

  

 

在disk.py 

#获取采集,执行采集命令是cmd 是统一的我直接写agent中进行调用
def get_disk(handler,hostname):
    return handler.cmd("dir",hostname)

agent代码

from .base import BaseHandler
from src.plugins.disk import get_disk


class AgnetHandler(BaseHandler):

    def cmd(self,command,hostname=None):
        import subprocess
        return subprocess.getoutput(command)

    def handler(self):
        """
        Agent模式下处理资产采集:硬盘、内存、网卡
        :return:
        """
        print('agent模式')
        #调用pulugins.disk /plugins.momory /plugins.nerwork
        disk = get_disk(self)
        print(disk)

 salt.py

from .base import BaseHandler

class SaltHandler(BaseHandler):

    def cmd(self, command, hostname=None):
        """
        调用saltstack远程连接主机并执行命令(saltstack的master)
        :param hostname:主机名
        :param command: 要执行的命令
        :return:
        """
        import salt.client #安装salt
        local = salt.client.LocalClient()
        result = local.cmd(hostname, 'cmd.run', [command])
        return result[hostname]

    def handler(self):
        """
        Salt模式下处理资产采集
        :return:
        """
        print('salt模式')

ssh.py

from .base import BaseHandler
from config  import settings

class SSHHandler(BaseHandler):

    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模式')

配置settings

### #######################SSH模式的配置##########################

SSH_PRIVATE_KEY="私钥路径"
SSH_USER='cmdb'  #用户名
SSH_PORT='22'   #端口

进行cmd 命令的约束

class BaseHandler(object):

    def cmd(self,command,hostname=None):
        '''
         cmd约束派生类
        :return:
        '''
        raise NotImplementedError('cmd() must Implemented.')

    def handler(self):
        '''
        handler约束派生类
        :return:
        '''
        raise NotImplementedError('handler() must Implemented.')

 

 

 ##########################用法升级,插件写法,反射使用 #################

写配置文件,

  

PLUGINS_DICT = {
'disk':'src.plugins.disk.Disk',
'memory':'src.plugins.memory.Memory',
'network':'src.plugins.network.Network',
'cpu':'src.plugins.cpu.CPU',
}

disk.py

class Disk(object):
    def process(self):
        '''
        执行命令拿到结果
        :return:
        '''
        return "硬盘"

memory.py

class Memory(object):
    def process(self):
        '''
        执行命令拿到结果
        :return:
        '''
        return "内存"

network.py

class Network(object):
    def process(self):
        '''
        执行命令拿到结果
        :return:
        '''
        return "网卡"

 

cpu.py

class CPU(object):
    def process(self):
        '''
        执行命令拿到结果
        :return:
        '''
        return "CPU"

 

 这里调用之前写好的反射lib 中的方法

from config import settings
from lib.module_srting import import_sting

def get_server_info():
    '''
    获取所有的资产信息并返回
    :return:
    '''
    info={}
    for name,path in settings.PLUGINS_DICT.items():
        cls=import_sting(path)
        obj = cls()
        info[name] = obj.process()

    return info

 

执行 agent写下测试

 ############################下面采集真实数据测试

使用agent的方式采集进行本地采集

agent.py

from .base import BaseHandler
from ..plugins import get_server_info


class AgnetHandler(BaseHandler):

    def cmd(self,command,hostname=None):
        import subprocess
        return subprocess.getoutput(command)

    def handler(self):
        """
        Agent模式下处理资产采集:硬盘、内存、网卡
        :return:
        """
        print('agent模式')
        #调用pulugins.disk /plugins.momory /plugins.nerwork
        ret = get_server_info(self)  #把自己传进去,agent默认没有主机所有不用hostname
        print(ret)

plugins-->__init__.py   执行命令的handler

from config import settings
from lib.module_srting import import_sting

def get_server_info(handler,hostname=None):
    '''
    获取所有的资产信息并返回
    :return:
    '''
    info={}
    for name,path in settings.PLUGINS_DICT.items():
        cls=import_sting(path)
        obj = cls()
        info[name] = obj.process(handler,hostname)

    return info

disk.py  ,memory.py ,cpu.py ,network.py   这里都是测试截取10个字符

class Disk(object):
    def process(self,handler,hostname):
        '''
        执行命令拿到结果磁盘
        :return:
        '''
        ret = handler.cmd('wmic diskdrive',hostname)[0:10]
        return ret
class CPU(object):
    def process(self,handler,hostname):
        '''
        执行命令拿到结果cpu
        :return:
        '''
        ret = handler.cmd('wmic cpu',hostname)[0:10]
        return ret
class Network(object):
    def process(self,handler,hostname):
        '''
        执行命令拿到结果网卡信息
        :return:
        '''
        ret = handler.cmd('ipconfig',hostname)[0:10]
        return ret
class Memory(object):
    def process(self,handler,hostname):
        '''
        执行命令拿到结果内存 测试截取10个字符
        :return:
        '''
        ret = handler.cmd('wmic memphysical list brief',hostname)[0:10]
        return ret

 

转载于:https://www.cnblogs.com/michael2018/p/10415691.html

<think>好的,用户需要制作关于CMDB系统的介绍PPT,并请求模板和资料。首先,我需要整理CMDB的基础知识,确保内容准确。根据引用[4],CMDB是集中式数据库,用于存储IT资产的配置信息,帮助企业管理架构和流程。这部分可以作为PPT的开篇介绍。 接下来,用户可能需要CMDB的核心功能。引用[2]提到CMDB需要灵活的数据模型和易用性,所以应该包括动态调整模型、数据关联性、自动化发现等。同时,引用[1]强调模型规划的重要性,可能需要单独一页说明如何设计有效的数据模型,避免项目失败。 用户可能需要实际案例或应用场景。引用[3]中的模板式设计可以作为类比,比如抽象类与接口的区别,但这里需要转化为CMDB的应用实例,比如配置项管理、变更控制等,结合引用[4]的ITIL框架,说明在事件管理、问题追踪中的应用。 关于PPT结构,可能需要分章节:概述、核心能力、模型设计、实施方法、案例。每个部分参考对应的引用,比如模型设计部分引用[1]和[2],实施方法引用[4]的ITIL方法。 用户可能还关心常见问题,比如实施中的陷阱,引用[1]提到过于关注模型导致失败,可以加入实施建议,强调业务导向和持续维护。此外,引用[5]的复制集心跳机制可能不相关,但如果有监控部分,可以提及高可用性设计。 最后,资料准备方面,建议引用官方文档、ITIL白皮书,并推荐Visio或Lucidchart做架构图。模板方面,使用科技感强的设计,保持简洁,用图表展示数据流动和模型结构。 需要确保内容符合用户需求,结构清晰,重点突出,并且提供实用的设计建议和资料来源。可能还需要生成相关问题,帮助用户深入思考,比如实施挑战、数据整合方法等。</think>### CMDB系统介绍PPT制作指南 #### 一、核心内容框架 1. **基础概念** - 定义:集中式配置管理数据库,存储IT基础设施的配置项(CI)及其关系$^{[^4]}$ - 核心价值:提供资产可视化、变更跟踪、影响分析能力 - 关键技术指标:数据准确率(建议>95%)、数据更新延迟(建议<5分钟) 2. **系统架构** ```mermaid graph TD A[数据采集层] -->|自动发现| B(CMDB核心) C[第三方系统] -->|API集成| B B --> D[数据分析层] D --> E[服务管理] D --> F[资源优化] ``` 3. **模型设计要点** - 采用面向业务的动态建模方法$^{[^2]}$ - 关键模型组件: - 基础配置项(服务器/网络设备) - 应用配置项(微服务/中间件) - 业务配置项(交易系统/用户体系) - 关系建模:`包含关系`、`依赖关系`、`调用关系` 4. **实施路线图** ```python # 伪代码示例:CMDB数据更新流程 def update_ci(ci_id, attributes): if validate(attributes): lock_database() update_version_control() write_audit_log() unlock_database() return True return False ``` #### 二、PPT设计建议 1. **视觉模板选择** - 推荐科技蓝/数据绿主色调 - 使用`IBM Plex Sans`或`思源黑体`字体 - 每页信息密度控制:文字≤100字 + 1个可视化元素 2. **必备要素** - 架构图(包含$N-Tier$架构示意图) - 数据流转图(采用$UML2.0$标准) - 实施效益对比柱状图(建议包含ROI计算) 3. **高阶内容** - 与DevOps工具链的集成模式$^{[^2]}$ - 基于机器学习的异常关联分析 - 多云环境下的CMDB联邦架构 #### 三、参考资料推荐 1. **官方文档** - ServiceNow CMDB白皮书 - BMC Atrium技术架构指南 2. **行业标准** - ITIL v4配置管理规范$^{[^4]}$ - ISO/IEC 19770-1资产管理标准 3. **设计工具** - 架构图:Visio/Lucidchart - 数据模型:Erwin/MySQL Workbench - 流程图:Draw.io/Excalidraw
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值