介绍

 

获取资产信息 

使用场景

	- 服务器少 用Paramiko
	- 服务器多 用Agent

  

1. Agent(基于shell命令实现) 

# API提供 
    1. URL 
    2. 发送数据格式  
    3. 返回值 (1001 1002各代表什么)


缺点:
    - Agent端 插件过多造成负载
    - 如果插件需要更新,则每台Agent都需要更新

优点:
    - 采集速度快
    



# Agent 每一台服务器一份

    import subprocess
    v1 = subprocess.getoutput('ipconfig')
    value1 = v1[20:30]
     
    v2 = subprocess.getoutput('dir')
    value2 = v2[0:5]
 
    #客户端向服务端发送
 
    url = "http://127.0.0.1:8000/asset.html"
    import requests
     
    response = requests.post(url,data={'k1':value1,'k2':value2})
    print(response.text)
 
# API 接受数据
 
    from django.shortcuts import render,HttpResponse
     
    def asset(request):
        if request.method == "POST":
            print(request.POST)
            # 写入到数据
            return HttpResponse('1002')
        else:
            return HttpResponse('姿势不对')
View Code

2. SSH形式(基于Paramiko模块)

# 中控机安装Paramiko模块,连接客户端获取到数据发送给API


#优点
    - 客户端不需要安装Agent

#缺点
    - 连接客户端速度慢


# Paramiko 中控机放一份 ####################

    - 远程连接服务器,执行命令,获取结果
    - 将结果发送API
    
    import paramiko

    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='192.168.11.98', port=22, username='root', password='123')

    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('ls')
    # 获取命令结果
    result = stdout.read()

    # 关闭连接
    ssh.close()
View Code

 3. SaltStack

 

 

#1. 统计收集服务器信息的三种方式
#2. 客户端
      1. 目录
              - bin
                  start.py                        #启动文件
              - config
                  setting.py                        #自定义配置文件

              - lib                                #公共的库
                  conf
                      config.py                    
                      global_setings.py            #内置的配置文件

              - src        #业务逻辑代码
              - log        #日志一般不写到这个目录下

       2. 配置文件

           ## 内置 和 自定义的配置文件 写一个类  自定义配置文件要在默认配置文件下面    

           1. bin/start.py        #把“config.settings”加入环境变量
                   os.environ['USER_SETTINGS'] = "config.settings"
     
           2. lib/conf/config.py  #setting对象里面整合 内置 和 自定义的配置文件

       3. src/plugins/_init_.py导入配置文件,执行收集各个资产的类,获取结果

             #设置配置文件 收集资产的类名
             # config/setting.py

                 PLUGINS_DICT = {
                    'basic': "src.plugins.basic.Basic",
                    'board': "src.plugins.board.Board",
                    'cpu': "src.plugins.cpu.Cpu",
                    'disk': "src.plugins.disk.Disk",
                    'memory': "src.plugins.memory.Memory",
                    'nic': "src.plugins.nic.Nic",
                }

            #导入配置文件 获取收集资产的类 执行各自的process方法
            # src/plugins/_init_.py

                - command 函数根据配置文件的不同执行不同的方法

                - 三种方式
                    - saltstack调api时只支持python2.7 或使用subprocess.getoutput执行远程命令
                    - shh方式 需要用户名 密码 端口 或者使用私钥
                    - agent 直接执行subprocess.getoutput

       4. 向API获取发送数据










知识点:
    - 配置文件 结合django的配置文件 自定义配置文件和内置配置文件整合到一个类里面,如果没有自定义配置文件使用内置配置文件

    - 收集资产的类名
        - 结合django的中间件设置类名 内存 硬盘 

    - 执行命令解决方式
        1. 定义一个执行三种方式的类  收集资产的类继承该类(没有采用) 

    - 三种方式
        - saltstack调api时只支持python2.7 或使用subprocess.getoutput执行远程命令
        - shh方式 需要用户名 密码 端口 或者使用私钥
        - agent 直接执行subprocess.getoutput

    - 使用到钩子 便于以后开发

    - 采集硬盘 下载MegaCli课执行文件
        MegaCli  -PDList -aALL

    - 采集内存 dmidecode  -q -t 17 2

    - 收集到的结果是字典格式
        {
           'disk':{"status",True,"data":"xxx"},
           'nic':{"status",True,"data":"xxx"}
        }

    -  发送数据
      - Agent方式 设置计划任务  向服务端发送数据
      - ssh/saltstack 方式
        1.获取到未采集的主机列表 循环主机列表 采集资产 发送给API


    - 唯一标识
        主板SN (虚拟机和服务器的SN号相同)
        主机名 (依赖本地文件)
View Code

 

posted @ 2017-10-09 17:46  golangav  阅读(371)  评论(0)    收藏  举报