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

服务器管理系统

管理后台示例

需求和设计

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

背景:

  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. GDB 显示别的文件;在别文件打断点;执行到函数末尾;跳出当前函数

    显示别的文件:l "文件名.后缀名":行号 在别文件打断点:b "文件名.后缀名":行号 执行到函数末尾:finish 跳出当前函数(当前位置到函数的末尾不被执 ...

  2. 列表、enumerate()函数,以及查看数据类型所有的内置方法

    随便看看 """ forList(): 测试list和enumerate()函数 examineFun(): 查看数据类型所有的内置方法 ""&quo ...

  3. LVS负载均衡基础介绍及NET、DR模式配置

    LVS:术语: CIP:Client IP:客户端IP: VIP:Virtual Server IP:虚拟主机对外IP: RIP:Real Server IP:真实主机IP: DIP:Director ...

  4. Spring Boot 2.x 综合示例-整合thymeleaf、mybatis、shiro、logging、cache开发一个文章发布管理系统

    一.概述 经过HelloWorld示例(Spring Boot 2.x 快速入门(上)HelloWorld示例)( Spring Boot 2.x 快速入门(下)HelloWorld示例详解)两篇的学 ...

  5. SystemTap Beginners Guide

    SystemTap 3.0 SystemTap Beginners Guide Introduction to SystemTap Edition 3.0   Red Hat, Inc. Don Do ...

  6. 创建DVWA环境时遇到的问题

    前言:我下载了PHP Study,也按照步骤下载保存了DVWA,之后我又按照百度的准备登陆检查是否正确安装DVWA,于是,我登录了百度上查到的链接:http://localhost/DVWA-mast ...

  7. DeconvNet 论文阅读理解

    学习语义分割反卷积网络DeconvNet 一点想法:反卷积网络就是基于FCN改进了上采样层,用到了反池化和反卷积操作,参数量2亿多,非常大,segnet把两个全连接层去掉,效果也能很好,显著减少了参数 ...

  8. SQL SERVER数据库修改是否区分大小写(转载)

    昨天去客户,发现程序无法应用,跟踪错误提示,提示的大致意思是“数据库表名和数据库字段名不存在”.查询后发现是SQL Server数据库设置了区分大小写的缘故(一般安装时,Oracle的正确安装下是默认 ...

  9. CF1120D Power Tree

    沙发~~ 题意简述 给你一棵有根树,定义叶子为度数为1的点. 你可以以$ w_x \(的代价控制\)x\(点.选择控制之后可以给它的子树里的叶子加 上\)t (t \in Z )$. 你要以最小的总代 ...

  10. PHP之环境配置

    我们的网站一般从开发到上线,整个过程会经历三个过程,本地开发->测试服测试->线上生产环境    对于不同环境下的配置也会不同,对于区分不同的环境是十分重要的. 1 域名判断法 使用的较多 ...