• 硬件资产管理系统总结


    硬件资产管理系统分三块:

    资产采集:

    CMDB资产采集方案:

      Agent

      SSH

      SaltSTATIC

    如何实现自动采集?

      1. Agent方式

        API:Django接收数据并入库

        程序:放置在每台服务器

      应用场景:机器多的时候

      每台服务器都有程序,程序实现采集数据(执行:import subprocess  ,  result = subprocess.getoutput(cmd)),然后把数据result发送给API

      2. SSH方式

        API:Django接收数据并存入库

        程序:放在中控机上(需要导入paramiko库)

        中控机:远程连接服务器,执行,结果返回中控机,然后由中控机发送给API

    用户名和密码方式:
     import paramiko
     ssh = paramiko.SSHClient()
     ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
     ssh.connect(hostname='192.168.16.72',port=22,username='root',password='redhat')
     stdin, stdout, stderr = ssh.exec_command('ifconfig')
     result = stdout.read()
     ssh.close()
     print(result)

    公钥和私钥方式:

    # import paramiko
    # private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
    # ssh = paramiko.SSHClient()
    # ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # ssh.connect(hostname='c1.salt.com', port=22, username='wupeiqi', pkey=private_key)
    # stdin, stdout, stderr = ssh.exec_command('df')
    # result = stdout.read()
    # ssh.close()

     

      3. SaltSTATIC方式

        API:Django接收数据并存入库

        程序:放在master上

    采集完数据发送给API:import  requests模块 -----> requests.post( url, json = 采集的数据)  : 这种格式做了两个工作:1. 字典序列化,2. 带请求头:content-type: application/json

    三种模式:

      - Agent:每天执行一次(不用向API获取今日未采集数据)

      - SSH: 

        - 根据API获取今日未采集的主机列表(import requests requests.get( url ))

        - 循环所有的主机:每台主机连接上执行命令

        - API发送数据到服务端入库

      - SaltSTATIC:

        - 根据API获取今日未采集的主机列表

        - 循环所有的主机:每台主机链接上执行命名

        - API发送数据到服务端入库

    线程池的使用:

      在SSH模式和SaltSTATIC模式下,首先会向AIP发请求得到今日所有未采集的主机名,得到之后对每台主机进行资源采集,然后通过API入库,如果服务器的数量庞大的话,效率就会显得很低,所以我们用线程池来解决这个问题,线程池中开多个线程,让这些线程并发的去采集数据入库,这样效率会明显的提高。

      需要导入模块ThreadPoolExecutor , 

        

    from concurrent.futures import ThreadPoolExecutor
    
    pool = ThreadPoolExecutor(10)  # 开10个线程
    
    for  host  in  host_list: # host_list 指的是所有的主机列表
        pool.submit(资产采集并发送API入库的函数名,host主机名)

    setting配置文件(参考的是DJango配置):目标---> 把默认的配置文件和程序员自定义的配置文件合并,若同名,那么自定义的配置文件的优先级高。合并后,程序员修改自定义的配置文件就相当于修改合并后的配置文件。

      

    步骤:
      1. 在run.py运行文件中: os.environ['AUTO_SETTINGS'] = "conf.settings" conf:文件夹 settings:自定义的配置文件.py
      2. 再新建一个lib文件夹,then 创建一个config文件夹,
       *********************************
        - lib
          - config
            - __init__.py
            - global_settings.py
       ***********************************
      3. 在__init__.py文件中写入一下代码:
        
    
    
    import os
    import importlib
    from . import global_settings

    class
    Settings(object): """ global_settings,配置获取 settings.py,配置获取 """ def __init__(self): for item in dir(global_settings): # dir(global_settings) 指的是global_settings中的所有属性和方法 if item.isupper(): k = item v = getattr(global_settings,item) setattr(self,k,v) # setattr(object, name, values)给对象的属性赋值,若属性不存在,先创建再赋值。 setting_path = os.environ.get('AUTO_CLIENT_SETTINGS') md_settings = importlib.import_module(setting_path) # 导入字符串格式的模块,导入自定义的配置文件中的属性, # 这里是后导入自定义的配置文件,所以优先级高 for item in dir(md_settings): if item.isupper(): k = item v = getattr(md_settings,item)
              setattr(self,k,v)
     settings = Settings()  # 单例模式

    注意:在导入一个包时,实际上导入了它的__init__.py文件。在导入配置文件时,可以统一写成:from lib.config import settings


        

    API

    后台管理

  • 相关阅读:
    FtpClient中文乱码问题解决
    JS点击按钮弹出窗口
    win7配置简单的FTP服务器
    docker 使用案例:部署nginx
    Asp.Net Boilerplate Project (ABP) 视频教程
    dva.js 用法总结
    webpack4: compilation.mainTemplate.applyPluginsWaterfall is not a function 解决方法
    c# MongoDB Driver 官方教程翻译
    c# redis 操作类库推荐:StackExchange.Redis.Extensions
    react-native导航器 react navigation 介绍
  • 原文地址:https://www.cnblogs.com/guomeina/p/7682553.html
Copyright © 2020-2023  润新知