CMDB 和自动化运维

传统运维和自动化运维的对比

1.企业中,项目的发布流程

产品经理调研需求 —-》三方开会讨论(开发,产品,运维,测试) —–> 开发进行开发产品
—-> 测试流程 (黑盒和白盒测试) —–> 上线


传统的上线流程:

SVN 开发将代码压缩一下发给运维,运维拿到代码之后,然后将代码解压缩,部署到服务
器上,启动服务

好处:流程比较简单

坏处: 服务器多的话,部署就非常的慢,影响上线的进度


自动化运维的流程

搞一个 web 的系统,勾选发布的机器,上传代码, 进行发布

2.监控系统

需要监控服务器的 CPU 使用率,磁盘大小(>90%,报警),内存使用率

CMDB

通过上面的例子,需要做一个基石项目,提供服务器的基础信息(服务器的磁盘,cpu,
内存等),这个基石项目叫做 CMDB Configure Manage DataBase 中文叫 配置管理数
据库,主要用来收集服务器的基础信息

架构图介绍

CMDB 的几种实现方式

Agent 实现方式

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

将待采集的服务器看成一个agent,然后再服务器上使用python的subprocess模块执行linux相关的命令,然后分析得到的结果,将分析得到的结果通过requests模块发送给API,API获取到数据之后,进行二次比对数据,最后将比对的结果存入到数据库中,最后django起一个webserver从数据库中将数据获取出来,供用户查看

优点:速度快
缺点:需要为每台服务器部署一个Agent程序


ssh 实现方式(基于 Paramiko)

在中控机服务器上安装一个模块叫paramiko模块,通过这个模块登录到带采集的服务器上,然后执行相关的linux命令,最后返回执行的结果,将分析得到的结果通过requests模块发送给API,API获取到数据之后,进行二次比对数据,最后将比对的结果存入到数据库中,最后django起一个webserver从数据库中将数据获取出来,供用户查看

优点:不用 每一台都部署 Agent

缺点:速度慢

如果在服务器较少的情况下,可应用此方法

import paramiko
   
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='c1.salt.com', port=22, username='root', password='123')
   
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
   
# 关闭连接
ssh.close()

saltstack 方式


问:如何使用 Python 代码来执行 linux 的命令?

答:subproces s模块来执行 linux 命令


问:为啥post中没有收到数据,而body中有

答:django 根据你 http 协议的头信息来判断,

如果是 content-type: application/form-url-encode的话,django 会将 body 中的数据付
给 post。

如果 content-type: application/json 的话,django 不会将 body 中的数据付给 post

总结:整个架构方案分 3 个部分:客户端采集,API 数据分析,数据展示

原文地址:https://www.cnblogs.com/kai-/p/12566834.html