自动化运维与传统运维
自动化运维与传统运维的比较
- 企业中,项目的开发流程
产品经理调研需求 ----》三方开会讨论(开发,产品,运维,测试) -----> 开发进行开发产品 ----> 测试流程 (黑盒和白盒测试) -----> 上线
- 传统的上线流程
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()
Only you can control your future
You're not alone. You still have family,peopel who care for you and want to save you.