CMDB开发(一)
一、CMDB前戏
# 项目开发流程
1.需求分析
产品经理 开发人员 客户等三方会议
2.架构设计
框架的选择 语言选择 数据库选择
3.分组开发
小组成员各自开发各自的功能(可能也会有交集)
4. 项目测试
1.程序员自己预测
2.测试人员全方面测试
5.交付上线
运维人员上线及维护程序运行
本质:开发将写好的代码给运维
# 1.代码上线
传统:
开发将写好的代码压缩之后以邮件的形式发送给运维
运维解压之后将项目部署到对应的服务(nginx,apache)
缺点:
上线效率低、人力成本大
解决措施:
开发一个代码上线的程序,让用户通过鼠标点点点即可完成代码的上线,从而不需要运维的参与
必备条件:
服务器的IP地址、服务器磁盘空间、CPU信息等服务器相关的元信息 # 2.监控服务
传统:
执行shell脚本
缺点:
实时率很低、不能自动化
解决措施:
开发一个监控服务器的python程序
将数据通过前端实时展示出来kibana
必备条件:
服务器的IP地址、服务器磁盘空间、CPU信息等服务器相关的元信息 # 3.装机服务
传统:
吃住都在机房,人工一台一台的装
缺点:
人力消耗过大
健康风险
效率低下
解决措施:
插上网线远程一键装机
必备条件:
服务器的IP地址、服务器磁盘空间、CPU信息等服务器相关的元信息 # 4.资产统计
传统:
使用excel表格记录
缺点:
变更记录一致性无法保证
长期下来文件过于混乱
解决措施:
自动统计、自动变更
必备条件:
服务器的IP地址、服务器磁盘空间、CPU信息等服务器相关的元信息 """
都需要必备条件>>>:获取服务器相关元信息
"""
CMDB:服务器资产管理系统
很多自动化运维相关的程序都需要获取服务器数据
CMDB就是这些程序的基石
二、CMDB整体架构
# CMDB是自动化运维的基石
"""
1.利用python执行linux命令获取数据
2.利用HTTP协议将数据以post方式发送出去
"""
简单架构图
三、CMDB四套方案
"""业内就四套方案"""
1.python脚本方案(agent方案)
web服务 <==> 数据库 <==> API程序 <==> agent(部署到服务器上的python服务) 2.ssh类方案(paramiko模块)
paramiko能够支持python代码远程链接服务器并操作服务器
运维工具ansible底层使用的也是paramiko
web服务 <==> 数据库 <==> API程序 <==> 中控机(paramiko) <==> 服务器
![]()
import paramiko # 创建SSH对象
ssh = paramiko.SSHClient()
# 允许链接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='192.168.10.1', port=2222, username='root', password='root@123')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df -lh')
"""
stdin 输入额外的命令s
stdout 正确的输出结果
stderr 错误的输出结构
"""
# 获取命令结果
result = stdout.read()
print(result)
# 关闭链接
ssh.close()
# 上述两种方案孰优孰劣???
"""
上述两套方案对比
agent方案
优点
定时执行agent脚本,速度快
缺点
每次都需要部署
应用场景
服务器数量特别多(新浪目前使用的就是该方案 3万台+服务器) ssh类
优点
不需要部署agent服务
缺点
使用paramiko登陆服务器速度比较慢
应用场景
服务器较少(百台为界限)
"""
3.saltstack方案
saltstack也是用python写的一个软件
master与所有minion彼此之间底层通过两个zeromq消息队列进行数据交互
web服务<==>数据库<==>API程序<==>中控机(salt-master)<==>服务器(salt-minion)
优点
不需要写任何代码,直接在中控机和服务器上yum install salt-master/minion
使用场景
服务器上已经部署了saltstack,那就多一事不如少一事
"""
步骤1:
master端
1.安装
yum install salt-master
2.修改配置文件 /etc/salt/master的IP
interface:10.0.0.1 # 表示master的IP
3.启动
service salt-master start
4.查看服务状态
service salt-master status minion端
1.安装
yum install salt-minion
2.修改配置文件 /etc/salt/minion
master:10.0.0.1 # master地址
或者
master
-10.0.0.1
-10.0.0.2
-10.0.0.3
...
3.启动
sevice salt-minion start
4.查看进程
ps aux|grep salt 步骤2:授权中控机可以访问的服务器
主要命令
1.salt-key -L # 查看已授权和未授权的salve
2.salt-key -a salve_id # 接收指定id的salve
3.salt-key -r salve_id # 拒绝指定id的salve
4.salt-key -d salve_id # 删除指定id的salve
5.salt-key -A # 接收所有的未授权的salve 步骤3:执行命令
salt '*' cmd.run 'ifconfig'
"""
4.puppet方案(不用)
较老,底层用ruby on rails编写,目前基本不用了
新浪第一代cmdb使用的就是puppt,后来ruby使用者较少,比便于后续编写及维护所以之后基本不在使用了
架构跟salt-stack方案一致,大致每30分钟统计一次 # 总结
我们CMDB用哪套方案
三套全部写
不同的公司可能会采用不同的方案
我们直接一次性全部写完,然后将功能基于django 中间件思想弄成可配置的服务
这样不同的公司采取不同的方案我们只需要在配置文件中修改即可
四、Django重要思想
1.django settings源码及实际应用
django Web框架
主要是专注于开发app
django请求生命周期
浏览器 web服务网关接口 django中间件 路由层 视图层 模板层 模型层
"""
在django中有两个配置文件
一个是暴露给用户可以自定义的配置文件
一个是框架全局的配置文件
from django.conf import settings
通过上述的模块导入,会发现settings既可以点出用户自定义配置文件里面的配置
也可以点出全局配置文件的配置
并且django的配置文件可以做到针对自定义配置和全局配置都有的配置
如果用户配置了就用用户的
如果用户没有配置就用默认的
"""
# django settings源码
from django.conf import settings
settings = LazySettings()
class LazySettings(LazyObject):
def _setup(self, name=None):
# settings_module = 'MyBBS.settings'
# os.environ类似一个全局的空字典
settings_module = os.environ.get(ENVIRONMENT_VARIABLE)
self._wrapped = Settings(settings_module)
class Settings:
def __init__(self, settings_module):
# 先将全局配置文件里面所有的配置复制给settings对象
for setting in dir(global_settings):
if setting.isupper():
setattr(self, setting, getattr(global_settings, setting))
self.SETTINGS_MODULE = settings_module
# from MyBBS import settings
# import_module模块能够将字符串拆成上面from .. import ..模式
mod = importlib.import_module(self.SETTINGS_MODULE)
# 再将自定义配置里的所有配置赋值给settings对象,如果两者有重复的,以下面的为准
for setting in dir(mod):
if setting.isupper():
setting_value = getattr(mod, setting)
setattr(self, setting, setting_value)
# os.environ使用
# a,b2个py文件
# a.py
import os
# print(os.environ)
# os.environ['name']='simon'
# print(os.environ.get('name')) import b
print(dir(b))
# 拿到所有变量
# ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'age', 'name']
res = getattr(b,'age')
print(res)
# 18 # b.py
name = 'simon'
age = '18'
import_module模块
# 新建目录aaa,将b.py拖到里面去 # 在a.py中获取b的变量
import importlib
str1='aaa.b'
# from aaa import b 等价于下面这句
res = importlib.import_module(str1)
print(res.name)
# simon # import_module 在django中间件中使用
基于django settings源码开发项目
# 和django settings一样设置2套settings,用户配置以及全局配置,根据配置,如果用户配置没有设置就获取全局配置里的默认配置

# 目录
settings_global
--conf
-- settings.py
--lib
--config
-- __init__.py
-- global_settings.py
start.py # 代码
# star.py
import os # if __name__ == '__main__':
# 现在全局的大字典中添加暴露给用户自定义配置文件字符串路径
os.environ.setdefault("XXX", "conf.settings")
from lib.config import settings
print(settings.NAME) # global_settings.py
# 项目默认的全局配置
NAME = '项目默认的全局配置'
A = '哈哈哈' # __init__
from lib.config import global_settings
import os
import importlib class LazySettings:
def __init__(self):
# 先读取全局配置
# 将global_settings所有的属性名取出来
for name in dir(global_settings):
# 判断是否是纯大写
if name.isupper():
# 获取属性名对应的属性值
k = name
v = getattr(global_settings,k)
# 将k v设值到对象中
setattr(self,k,v)
# 再读取局部配置
# 先获取局部配置文件字符串路径
str_path = os.environ.get('XXX')
# 利用importlib模块导入配置文件
module = importlib.import_module(str_path)
# 循环读取自定义配置文件中所有的属性名
for name in dir(module):
# 判断是否是纯大写
if name.isupper():
# 获取属性名对应的属性值
k = name
v = getattr(module,k)
# 将k v设值到对象中
setattr(self,k,v) settings = LazySettings() # conf/settings.py
# 暴露给用户的自定义配置
# NAME = '暴露给用户的自定义配置' # 启动start.py时,如果没注销conf/settings.py中的Name获取的就是settings.py中的变量
# 如果注销了,就过去到global_settings.py中的Name
CMDB开发(一)的更多相关文章
- Python CMDB开发
Python CMDB开发 运维自动化路线: cmdb的开发需要包含三部分功能: 采集硬件数据 API 页面管理 执行流程:服务器的客户端采集硬件数据,然后将硬件信息发送到API,API负责将获取 ...
- python运维开发(二十五)---cmdb开发
内容目录: 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT基础架构库(Information Technology Infr ...
- CMDB开发
浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...
- CMDB开发(需求分析)
浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...
- 运维平台cmdb开发-day3
后台管理 1. 访问过程 我们在前面2天得到了各个客户端的资产数据信息,我们将各个这个数据打包发送到api,这个api其实就是django的url传参,之后按照数据的格式对比数据库增删改 2. 后台页 ...
- 运维平台cmdb开发-day2
一 发送数据到api(Django的URL) 发送请求携带参数 requests.get(url='http://127.0.0.1:8000/api/asset/?k1=123') # <Qu ...
- 运维平台cmdb开发-day1
序读项目由来 终极目标,运维平台.自动化.装机,监控,安装软件,部署基础服务,资产管理,之前是excel,现在是客户端自动获取,变更记录 后台管理 api 采集资产 四种模式agent 定时,每天执行 ...
- (转)CMDB介绍
原文:https://www.cnblogs.com/xuecaichang/p/10265936.html CMDB开发---https://blog.csdn.net/bbwangj/articl ...
- 关于CMDB
关于CMDB: CMDB运维管理平台是由CMDB开发团队,针对目前服务器运维.监控,批量管理提出的一个开源. 易用.实用的跨平台服务器运维管理平台. 统筹来说cmdb就是将已有的规则化运维技术规则到运 ...
- python学习博客地址集合。。。
python学习博客地址集合... 老师讲课博客目录 http://www.bootcdn.cn/bootstrap/ bootstrap cdn在线地址 http://www.cnblogs. ...
随机推荐
- 记录--让URL地址都变成了"ooooooooo"
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 发现一个很有创意的小工具网站,如封面图所示功能很简单,就是将一个URL地址转换为都是 ooooooooo 的样子,通过转换后的地址访问可以 ...
- 记录-JS简单实现购物车图片局部放大预览效果
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.实现效果 二.代码实现 代码不多,先看一下 HTML 里面结构很简单,初始化 MagnifyingGlass 对象来关联一个 IMG ...
- 【FastDFS】面试官:如何实现文件的大规模分布式存储?(全程实战)
写在前面 在<[FastDFS]小伙伴们说在CentOS 8服务器上搭建FastDFS环境总报错?>一文中,详细的介绍了如何在CentOS 8服务器行搭建FastDFS环境.在生产环境中, ...
- C# OpenCv Haar、LBP 人脸检测
using OpenCvSharp; namespace OPenCVDemo { class Program { static void Main(string[] args) { // Load ...
- nodejs下载 安装 配置环境
1.下载 下载地址:https://nodejs.org/en/download/ 下载完成后,双击安装包,开始安装,一直点next即可.我把安装路径设置为 D:\Program Files\node ...
- docker部署Prometheus
1.安装运行Prometheus 下面介绍如何使用Prometheus.Grafana.CAdvisor.node-exporter.mysqld-exporter对本机服务器性能.Docker容器. ...
- java实战字符串2:中英字符串相互转换
题目描述 输入字符串为中文拼音号码串或者英文号码串,如果输入是中文拼音号码串则转成英文号码串,如果输入是英文号码串则转成中文号码串. 特殊情况是英文号码串会出现Double + 英文数字或者拼音数值. ...
- STAR法则是什么(如何把一件事表达清楚)
STAR法则,即为Situation Task Action Result的缩写,具体含义是: Situation: 事情是在什么情况下发生 Task: 你是如何明确你的任务的 Action: 针对这 ...
- 【直播回顾】OpenHarmony知识赋能五期第六课——子系统相机解读
5月26日晚上19点,知识赋能第五期第六节课 <OpenHarmony标准系统多媒体子系统之相机解读> ,在OpenHarmony开发者成长计划社群内成功举行. 本期课程,由深开鸿资 ...
- 选择适合您网站的 SQL 托管:MS SQL Server、Oracle、MySQL
SQL托管 如果您希望您的网站能够存储和检索数据,您的Web服务器应该能够访问使用SQL语言的数据库系统.以下是一些常见的SQL托管选项: MS SQL Server Microsoft的SQL Se ...

