自动化运维与传统运维

自动化运维与传统运维的比较

  • 企业中,项目的开发流程
产品经理调研需求 ----》三方开会讨论(开发,产品,运维,测试) -----> 开发进行开发产品  ----> 测试流程 (黑盒和白盒测试) -----> 上线
  • 传统的上线流程
SVN 开发将代码压缩一下发给运维,运维拿到代码之后,然后将代码解压缩,部署到服务器上,启动服务  

优点:流程比较简单
缺点:服务器多的话,部署就非常的慢,影响上线的进度
  • 自动化运维的流程
搞一个web的系统,勾选发布的机器,上传代码, 进行发布
# 注:上述系统需要知道服务器的基本信息(元信息)
  • 监控系统
比如:需要监控服务器的CPU使用率,磁盘大小(>90%,报警),内存使用率
# 注:上述系统需要知道服务器的基本信息(元信息)

结论

所以我们要想做自动化运维的话,我们首先的知道基本信息,由此我们就引出了CMDB项目
CMDB:Configure Manage Database  中文叫 配置管理数据库,主要用来收集服务器的基础信息

CMDB 的概念图

CMDB的架构图(实现方案)

第一种agent方案

Agent方式,可以将服务器上面的Agent程序作定时任务,定时将资产信息提交到指定API录入数据库

其本质就是在各个服务器上执行subprocess.getoutput()命令,然后将每台机器上执行的结果,返回给主机API,然后主机API收到这些数据之后,放入到数据库中,最终通过web界面展现给用户

优点:速度快

缺点:需要为每一天服务器部署一个Agent程序

  • agent 方案简单演示
import subprocess, json

res = subprocess.getoutput('ipconfig')
# print(res)

info = res[12:23]   # 假设可以这一步是可以从信息中获取我们想要的ip

import requests

requests.post('http://127.0.0.1:8000/api/', data=json.dumps(info))
  • server
from django.shortcuts import render, HttpResponse

# Create your views here.


def asset(request):

    print(request.body)

    return HttpResponse('OK')
问:如何使用Python代码来执行linux的命令?
答:subprocess模块来执行linux命令

问:为啥post中没有收到数据,而body中有
答:django根据你http协议的头信息来判断,
如果 content-type: application/form-url-encode的话,django会将body中的数据付给post。如果 content-type: application/json的话,django不会将body中的数据付给post

第二种ssh类(基于Paramiko模块)

中控机通过Paramiko(py模块)登录到各个服务器上,然后执行命令的方式去获取各个服务器上的信息

优点:不需要在每一个服务器上都部署代码,只需通过中控机连接

缺点:因为是通过网络连接,所以速度会慢点

所以如果在服务器较少的情况下可以应用次方法

  • ssh类方法
"""
pip install paramiko
"""

import paramiko

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

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

# 关闭连接
ssh.close()

链接:
https://lupython.gitee.io/2018/05/05/CMDB介绍/

原文地址:https://www.cnblogs.com/yafeng666/p/12568940.html