介绍
获取资产信息
使用场景 - 服务器少 用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('姿势不对')

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()

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号相同) 主机名 (依赖本地文件)
浙公网安备 33010602011771号