自动化运维平台愿景和服务器管理系统背景

服务器管理系统

管理后台示例

需求和设计

为什么开发服务器管理系统?

背景:

  1. 原来是用Excel维护服务器资产,samb服务【多个运维人员手动维护】
  2. 搭建运维自动化平台【服务器管理】
  3. 预算
  4. 部门合作数据交换,处理麻烦

目标:

  1. 硬件资产自动采集
  2. API

架构设计:

  1. 采集资产【每台服务器上安装的客户端,agent,定时任务每天凌晨2点】
  2. API【入库和比较创建变更日志】
  3. 后台管理部分

系统目标

1. 自动采集服务器硬件资产信息
2. 报表
3. API(给其他系统提供数据)

设计思路

1.专门采集资产信息软件,执行命令,筛选过滤。192.168.16.54

用户名:
密码:
pymysql\ insert into network values(192.168.16.54)

考虑到安全原因要定期更改、被黑客拿到,所以一般不这样做

流程:
- 执行shell名称,获取结果,解析
- Python代码发送POST请求,数据
http://127.0.0.1:8000/index

客户端代码结构如下图:

- Django

2. API:

http://127.0.0.1:8000
url -> 视图函数
def func(request):
request.POST
保存到数据库

3. 后台管理:

提供数据管理

服务器端代码结构图如下

基本框架搭建

采集资产信息

客户端代码auto_client\run.py

import subprocess
import requests
result = subprocess.getoutput('ipconfig')
message = result[760:775] api = "http://127.0.0.1:8000/api/server.html" requests.post(url=api,data={'k1':message}) #因为公司会采集很多资产,今天需要这样的信息,明天可能需要其他的信息,所以我们要开发成可插拔式的

客户端截图

服务器端auto_server\api\urls.py

from django.conf.urls import include, url
from django.contrib import admin
from .import views urlpatterns = [
url(r'^server.html$', views.server),
] auto_server\api\views.py from django.shortcuts import render,HttpResponse
from django.views.decorators.csrf import csrf_exempt
# Create your views here. @csrf_exempt #表示不用再加csrf系统用户验证了
def server(request):
print(request.POST)
return HttpResponse('已收到')

服务器端auto_server\api\urls.py 

from django.shortcuts import render,HttpResponse
from django.views.decorators.csrf import csrf_exempt
# Create your views here. @csrf_exempt #表示不用再加csrf系统用户验证了
def server(request):
print(request.POST)
return HttpResponse('已收到')

服务器端auto_server\api\views.py

from django.conf.urls import include, url,include
from django.contrib import admin urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^api/', include('api.urls')),
]

服务器端截图

API实现

浏览器API测试

客户端代码

多个资产如何处理

import subprocess
import requests #10个资产
server_dict = {} result = subprocess.getoutput('ipconfig')
message = result[760:775]
server_dict['network'] = message result = subprocess.getoutput('ipconfig')
message = result[760:775]
server_dict['network'] = message api = "http://127.0.0.1:8000/api/server.html"
print(message)
requests.post(url=api,data={'k1':message}) #因为公司会采集很多资产,今天需要这样的信息,明天可能需要其他的信息,所以我们要开发成可插拔式的

资产采集之定制采集插件

客户端代码auto_client\run.py

import sys
import os BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
#当前文件路径上一层bin,再上一层就到auto_client,加到环境变量里面来了
sys.path.append(BASEDIR)
from conf import settings for k,v in settings.PLUGIN_TIMES():
print(k,v,type)
#找到字符串:src.plugins.nic.Nic,src.plugins.desk.Disk
#找到对应的模块,找到对应的类,勒种执行process方法
# from src.plugins.disk import Disk
# obj = Disk()
# obj.process() import importlib
m = importlib.import_module("src.plugins.nic.Nic")
cls = getattr(m, 'Nic')
obj = cls()
obj.process() v = "src.plugins.nic.Nic"
module_path,cls_name = v.rsplit('.',maxsplit=1)
#我从右边找到第一个点分割一下
m = importlib.import_module(module_path)
cls = getattr(m,cls_name)
obj = cls()
obj.process()

参照Django配置文件部分代码:

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
)

可扩展性,肯本没有,所以我觉得这样不好

  1. 采集资产的组件写成了一个目录
  2. 一般情况程序不写在软件里
  3. 文件就2M但是日志3G, 所以一般不写在这

src 业务逻辑

  1. 调用只写方法
  2. 我这插件有20个,我全都能调用的了吗?
  3. 但是我只用3个。可扩展加上一个 配置文件

基于以上原因解决方案如下:

auto_client\src\plugins\disk.py

class Disk(object):

    def process(self):
return 'disk info'

auto_client\src\plugins\nic.py

class Nic(object):

    def process(self):
return 'nic info'

auto_client\src\plugins\memory.py

class Memory(object):

    def process(self):
return 'memory info'

auto_client\bin\run.py 

import sys
import os
import importlib
import requests
BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASEDIR)
from conf import settings server_info = {}
for k,v in settings.PLUGIN_ITEMS.items():
# 找到v字符串:src.plugins.nic.Nic,src.plugins.disk.Disk
module_path,cls_name = v.rsplit('.',maxsplit=1)
module = importlib.import_module(module_path)
cls = getattr(module, cls_name)
obj = cls()
ret = obj.process()
server_info[k] = ret requests.post(
url=settings.API,
data=server_info
)

 客户端截图

CMDB服务器管理系统【s5day87】:需求讨论-设计思路的更多相关文章

  1. CMDB服务器管理系统【s5day89】:部分数据表结构-资产入库思路

    1.用django的app作为统一调用库的好处 1.创建repository app截图如下: 2.好处如下: 1.app的本质就是一个文件夹 2.以后所有的app调用数据就只去repository调 ...

  2. CMDB服务器管理系统【s5day89】:深入理解Java的接口和抽象类

    对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用, ...

  3. CMDB服务器管理系统【s5day88】:采集资产之Agent、SSH和Salt模式讲解

    在对获取资产信息时,简述有四种方案. 1.Agent  (基于shell命令实现) 原理图 Agent方式,可以将服务器上面的Agent程序作定时任务,定时将资产信息提交到指定API录入数据库 优点: ...

  4. CMDB服务器管理系统【s5day90】:API验证

    1.认证思路刨析过程 1.请求头去哪里拿? 1.服务器端代码: def test(request): print(request) return HttpResponse('你得到我了') 2.客户端 ...

  5. CMDB服务器管理系统【s5day88】:采集资产-文件配置(一)

    django中间件工作原理 整体流程: 在接受一个Http请求之前的准备 启动一个支持WSGI网关协议的服务器监听端口等待外界的Http请求,比如Django自带的开发者服务器或者uWSGI服务器. ...

  6. CMDB服务器管理系统【s5day90】:API构造可插拔式插件逻辑

    1.服务器端目录结构: 1.__init__.py from django.conf import settings from repository import models import impo ...

  7. CMDB服务器管理系统【s5day90】:获取今日未采集主机列表

    1.目录结构 1.服务器端 2.客户端 2.具体代码如下 1.数据库增加两个字段 class Server(models.Model): """ 服务器信息 " ...

  8. CMDB服务器管理系统【s5day90】:创建资产更新服务器硬盘信息

    1.创建硬件资产信息 import json from django.shortcuts import render,HttpResponse from django.views.decorators ...

  9. CMDB服务器管理系统【s5day91】:资产采集相关问题

    资产采集唯一标识和允许临时修改主机名 class AgentClient(BaseClient): def exec(self): obj = PluginManager() server_dict ...

随机推荐

  1. 【原】Java学习笔记011 - 数组

    package cn.temptation; import java.util.Scanner; public class Sample01 { public static void main(Str ...

  2. 注册表修改computer name

    修改windows server的机器名的时候,发现change按钮是disable的. 手动修改不了,用注册表regedit来修改. HKEY_LOCAL_MACHINE\SYSTEM\Curren ...

  3. Bootstrap -- 导航栏样式、分页样式、标签样式、徽章样式

    Bootstrap -- 导航栏样式.分页样式.标签样式.徽章样式 1. 使用图标的导航栏 使用导航栏样式: <!DOCTYPE html> <html> <head&g ...

  4. scheme实现最基本的自然数下的运算

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/9123363.html 作者:窗户 Q ...

  5. 移动端解决单机事件延迟fastclick

    引入百度静态公共资源库 <script type='application/javascript' src='http://apps.bdimg.com/libs/fastclick/1.0.0 ...

  6. Django视图(views)

    1.FBV (基于函数的视图) 实例 url.py url(r'^add_publicer/',views.add_publicer) def add_publicer(request): if re ...

  7. TPYBoard开发板搭建,实现隐秘通信

    一.准备工作 lTPYBoard v102(简称v102) 1块 lTPYBoard v202(简称v202) 1块 l杜邦线.MicroUSB数据线 若干 (成本100元以内,某宝上可以买到) 附上 ...

  8. SkylineGlobe 7.0.1 & 7.0.2版本Web开发 如何正确使用三维地图控件和工程树控件

    Skyline TerraExplorer Pro目前正式发布的7.0.1&7.0.2版本,还只是64位的版本, 在Web开发的时候,如何在页面中正确嵌入三维地图控件,让一些小伙伴凌乱了. 下 ...

  9. vuex的使用步骤

    第一步: 安装vuex:npm install vuex --save 第二步:在src下创建文件夹store及文件index.js import Vue from 'vue'; import Vue ...

  10. 【翻译】WhatsApp 加密概述(技术白皮书)

    目录      简介      术语      客户端注册      会话初始化设置      接收会话设置      交换信息      传输媒体和附件      群组消息      通话设置   ...