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

服务器管理系统

管理后台示例

需求和设计

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

背景:

  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. 【记录】文件加密软件 Gilisoft File Lock Pro v11.0 中文注册版

    ---恢复内容开始--- GiliSoft File Lock Pro 是一款优秀的加密工具,用它可以隐藏或加密文件.文件夹.磁盘分区,而且被加密的文件不会因为被加密(忘记密码)而丢失,可算是很安全的 ...

  2. XML详解二XML的解析与创建

    XML用来传输和存储数据,如何解析获取到的XML文本呢? 一.解析XML 创建demo.xml文件: <?xml version="1.0" encoding="U ...

  3. RabbitMQ远程执行任务RPC。

    如果想发一条命令给远程机器,再把结果返回 这种模式叫RPC:远程过程调用 发送方将发送的消息放在一个queue里,由接收方取. 接收方再把执行结果放在另外一个queue里,由发送方取 实际上,发送方把 ...

  4. Python总结(一)

    从大学开始,就对python有了兴趣,毕业设计就是用python做的一个新闻爬取和关键字提取的程序.然而,毕业之后由于一直没有从事python相关的开发,所以就一直没有再使用,一直停留在偶尔看一些资料 ...

  5. Loj #2324. 「清华集训 2017」小 Y 和二叉树

    Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...

  6. pyinstaller 打包selenium脚本 取消cmd

    更改源代码 找到文件(selenium->webdriver->common->service.py) 添加一个参数

  7. ENABLE_DDL_LOGGING 参数使用 监控对象的DDL(在alter 日志记录DDL语句)

    启用 DDL 日志记录 功能--支持动态调整 alter system set enable_ddl_logging=true; alter system set enable_ddl_logging ...

  8. L2-2 重排链表 (25 分)

    给定一个单链表 L​1​​→L​2​​→⋯→L​n−1​​→L​n​​,请编写程序将链表重新排列为 L​n​​→L​1​​→L​n−1​​→L​2​​→⋯.例如:给定L为1→2→3→4→5→6,则输出 ...

  9. .Net Core应用框架Util介绍(一)

    距离上次发文,已经过去了三年半,这几年技术更新节奏异常迅猛,.Net进入了跨平台时代,前端也被革命性的颠覆. 回顾 2015年,正当我还沉迷于JQuery + EasyUi的封装时,突然意识到技术已经 ...

  10. 新Chrome浏览器不支持html5的问题

    window.applicationCache事件,最新chrome浏览器已经不能判断是否支持html5: 之前,在IE和Google中 为ApplicationCache对象,而在FF中为 Offl ...