一、传统运维方式和自动化运维的区别

二、CMDB的介绍

三、CMDB的四种方式

四、项目的目录架构介绍以及配置文件的升级编写

五、比较low的项目架构书写

六、可插拔式收集资产

七、对收集的服务器信息进行清洗

八、整个项目的总结

九、收集资产遇到的唯一标识的大坑

十、开启线程池并发采集

十一、后台目录结构设计

十二、API请求认证

十三、后台数据表结构设计

十四、后台数据表生成

十五、资产清洗入库

十六、硬盘数据入库

十七、AES加密数据

十八、将数据展示前端

十九、bootstraptable行内进行编辑

二十、layui的使用

二十一、使用echarts,highcharts进行画图

Python的几个方向:

 1、Python自动化运维

 2、爬虫(数据分析)

 3、web开发

 4、人工智能(AI)

一、传统运维方式和自动化运维的区别

  传统运维:

    项目上线的流程:

      第一步:产品经理进行前期调研(需求分析)

      第二步:和开发进行评审

      第三步:开发进行开发

      第四步:测试人员进行测试

      第五步:交给业务运维人员进行上线 (重点讨论这个)--怎么上线-->直接将代码给业务运维人员(代码打一个包用qq传过来),让业务运维人员把代码放到服务器上(拿到代码解压,然后放到服务器上)。服务器上需要配一下域名(就跟百度一样www.baidu.com)才能够对外服务。

  

缺点:

  增加运维的成本

针对这种传统的方式有什么解决优化方案?

改进一:专门搞一个自动分发程序代码的系统。

  a.这个系统的基础是得有服务器的信息(ip、hostname、等)

  b.能不能报警自动化

SMTP
一千台服务器上放微博的项目,尾部项目出问题了会触发服务器上一个报警(每台服务器中都有),发邮件,发短信或者打电话到运维人员手机上。

怎么发现服务器报错信息?

  c.装机系统

    传统的装机和布线:idc运维-->用大量的人力物力来进行装机。    

    自动化运维?--->把服务器放到机架上,插一根网线。把服务器ip还有hostname信息告诉一个专门装机的系统。    

我发送一个命令,centos就能够装好。

collober

 

 d.收集服务器元信息

    1.Excel

      缺点:人为干预太严重,统计的时候也会有问题

    2.搞一个系统---->这就叫CMDB

      作用:自动的帮我们收集服务器的信息,并且自动的记录我们的变更信息。    

二、CMDB的介绍

  自动的帮我们收集服务器的信息,并且自动的记录我们的变更信息。让所有的操作都变得自动化。

  

三、CMDB的四种方式

大体流程:

开始收集服务器的元数据:怎么收集虚拟机服务器所有的信息?---->怎么汇报给实体机,数据库里?

获取ip地址:

获取主机名:

获取硬盘信息:

获取内存信息:

1.实体机发命令虚拟机执行ifconfig

2.虚拟机执行命令得到执行的结果可以通过socket发送给实体机

3.需要通过正则或者Python的一些字符串函数将ip信息给分析出来

在实际开发中,收集服务器的信息总共有4中方案:

第一个方案:agent方式 (代理中介的意思)

  第一步:在每台服务器上写Python脚本(脚本内容),且python代码执行的结果还在每台服务器上。

import subprocess

# res = subprocess.getoutput('ipconfig')
res = subprocess.getoutput('ifconfig') print(res) # 用正则,字符串分割函数...拿到想要的结果

test.py

  第二步:定时(crontab)的执行收集代码

linux命令crontab,可以指定在哪一时刻执行某一个脚本。

crontab

  第三步:将执行的结果返回给那台专门收集信息的服务器。用requests模块,post请求

  第四步:专门收集的服务器收集到所有的服务器信息后放到DB(数据库)服务器里。

  第五步:搞一个给管理人员或者想要用CMDB系统的人看的Django页面

注:我们把每一台服务器叫每一个agent。开启一个agent代表的意思是,在我们每一台服务器上,我们布一个agent脚本(就是我们写的test.py脚本)。agent脚本目前三行代码,但将来实际上会非常非常的大。

缺点:每台服务器都要安装agent

优点:速度快

应用场景:适用服务器多的时候,大公司

agent方式:

  agent脚本

  API

  web界面

第二种方案:ssh连接   另外目前市面上除了使用paramiko模块本身外,还有fabric,ansible等,它们内部都是基于paramiko模块实现的

# # ssh类   用于连接远程服务器并执行基本命令
# import paramiko
#
#
# # 创建SSH对象
# ssh = paramiko.SSHClient()
# # 允许连接不在know_hosts文件中的主机
# ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# # 连接服务器
# ssh.connect(hostname='zhangrenguo', port=22, username='root', password='1')
#
# # 执行命令
# stdin, stdout, stderr = ssh.exec_command('ifconfig')
# # 获取命令结果
# result = stdout.read()
# print(result.decode('utf-8'))
# # 关闭连接
# ssh.close()

ssh 连接用paramiko

缺点:依赖于网络,速度慢

优点:不用部署agent

适用于服务器少的

ssh类(parmiko)

  parmiko(获取主机名)

  API

  Web界面展示

第三种方案:saltstack的工作原理--->

安装:

#master端:
"""
1. 安装salt-master
yum install salt-master
2. 修改配置文件:/etc/salt/master
interface: 10.0.0.7 # 表示Master的IP
3. 启动
service salt-master start
"""
#slave端:
"""
1. 安装salt-minion
yum install salt-minion
2. 修改配置文件 /etc/salt/minion
master: 10.0.0.7 # master的地址

master:
- 10.211.55.4
- 10.211.55.5
random_master: True
id: c2.salt.com # 客户端在salt-master中显示的唯一ID
3. 启动
service salt-minion start
""""""

授权

"""
salt-key -L # 查看已授权和未授权的slave
salt-key -a salve_id # 接受指定id的salve
salt-key -r salve_id # 拒绝指定id的salve
salt-key -d salve_id # 删除指定id的salve
"""

执行命令

#在master服务器上对salve进行远程操作
salt 'c2.salt.com' cmd.run 'ifconfig' #基于API的方式
import salt.client
local = salt.client.LocalClient()
result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])

缺点:所有服务器需要安装saltstack软件

优点:直接用现有的软件,速度快,开发成本低

适用于公司一直使用saltstack,业内最流行的方案

saltstack:

  saltstack软件

  API

  web界面展示

第四种方案:puppet 慢慢被淘汰了

不做了解。

四种方式大致的步骤:

  1.收集服务器信息

  2.数据提交给api

  3.文本页面展示

可视化工具:

https://echarts.baidu.com

https://www.highcharts.com.cn/demo/highcharts

在线画图工具:

www.processon.com

www.draw.io

为什么要使用CMDB?

  因为现在统计资产使用的是Excel表格,但业务业务越来越多。导致变更资产的时候,Excel表格越来越乱。为了让所有的资产收集全部自动化,所以我们做了CMDB。

目标:

三种方式我们都要实现兼容

只需要改配置文件里面的一个配置,我们就能够自如的切换

四、项目的目录架构介绍以及配置文件的升级编写

项目名叫autoclient

core文件夹

conf目录放settings一些自定义配置文件settings.py

bin目录放入口启动可执行的文件start.py

src放一些核心业务的一些逻辑agent.py

db 放数据相关文件

log 放一些日志相关文件

lib 放一些自己写的公共的类公共的模块common.py

test.py测试

配置文件的编写:

  目标:写一个类似于Django的配置方法(有自定义的配置文件,还要有项目默认的配置文件)--->无非是集成自定义配置文件和项目默认的配置文件里面的这些配置。通过面向对象高级里面知识!

代码重复

    可以写一个公共的方法
可以写一个父类方法
代码高内聚--->某一个方法就干一件事,剩下的其他的不管。
代码低解耦--->启动脚本是脚本,不参与业务逻辑。

收集的信息:

  主板信息:hostname、Mac地址

  cpu信息:型号,几个核

  dick(磁盘信息):磁盘大小、几块磁盘

  memory(内存信息):

  nic(网卡信息):ip地址、

可插拔式的收集上述信息-----什么是可插拔式的?-->在配置文件里的配置,想用的时候去掉注释,不想用的时候加上注释。和业务逻辑没关系。

接下来升级可插件的__init__文件。 写代码收集

插件的第一种解决方案:

  a、写一个公共的类

    让其他的所有的类继承Base这个基类

  b、

  

信息已经收集好了---发送给API通过requests模块-->

  

收集的信息:Linux上的命令

  主板信息:hostname、Mac地址

  cpu信息:型号,几个核             cat /proc/cpuinfo

  dick(磁盘信息):磁盘大小、几块磁盘

  memory(内存信息):

  nic(网卡信息):ip地址、

  

  

CMDB(Configuration Management Database)资产管理系统和 运维自动化的更多相关文章

  1. 魅族CMDB运维自动化实践

    一.简介 原创:梁鹏 本文是根据魅族系统架构师梁鹏10月20日在msup携手魅族.Flyme.百度云主办的第十三期魅族技术开放日< 魅族CMDB运维自动化实践>演讲中的分享内容整理而成. ...

  2. 运维自动化之salt笔记

    1:saltstack的基本介绍 2:salt的安装 1:服务端1:安装2:配置文件3:运行4:注意事项2:客户端1:安装2:配置文件3:运行4:注意事项 3:salt的使用: 1:基础知识1:tar ...

  3. 运维自动化之Cobbler系统安装详解

    原文链接 参考文档 参考文档SA们现在都知道运维自动化的重要性,尤其是对于在服务器数量按几百台.几千台增加的公司而言,单单是装系统,如果不通过自动化来完成,根本是不可想象的. 运维自动化安装方面,早期 ...

  4. 运维自动化管理服务器 CheungSSH

    CheungSSH 是一款中国人自主研发的Linux运维自动化管理服务器软件,后端使用 Python 语言+Django 的 Web 框架,前端使用 Bootstrap+Javascript+jQue ...

  5. 开源运维自动化平台-opendevops

    开源运维自动化平台-opendevops 简介 官网 | Github|  在线体验 CODO是一款为用户提供企业多混合云.自动化运维.完全开源的云管理平台. CODO前端基于Vue iview开发. ...

  6. CentOS 下运维自动化 Shell 脚本之 expect

    CentOS 下运维自动化 Shell脚本之expect 一.预备知识: 1.在 Terminal 中反斜杠,即 "" 代表转义符,或称逃脱符.("echo -e与pri ...

  7. 运维自动化之SALTSTACK简单入门

    运维自动化之SaltStack简单入门 饱食终日而无所事事,是颓也,废也.但看昨日,费九牛二虎之力除一BUG便流连于新番之中,不知东方之既黑,实乃颓颓然而荒废矣.故今日来缀一文以忏昨日之悔. Salt ...

  8. Ansible 运维自动化 ( 配置管理工具 )

    背景 出差背景,要搞项目的自动化部署.因为只直接对接生产分发,机器又非常多,这样以往使用的bat只能作为应急方案了,还是得考虑使用专业化的工具来做这个事情! 当下有许多的运维自动化工具( 配置管理 ) ...

  9. Ansible运维自动化工具19个常用模块使用实例【转】

    一.模块列表 1.setup 2.ping 3.file 4.copy 5.command 6.shell 7.script 8.cron 9.yum 10.service 11.group 12.u ...

随机推荐

  1. Python:游戏:贪吃蛇原理及代码实现

    一.游戏介绍 贪吃蛇是个非常简单的游戏,适合练手.先来看一下我的游戏截图: 玩法介绍:回车键:开始游戏空格键:暂停 / 继续↑↓←→方向键 或 WSAD 键:控制移动方向. 食物分红.绿.蓝三种,分别 ...

  2. 浅谈Promise

    学习过JavaScript的人都知道,JavaScript是单线程作业,这样会有一个很大的缺陷,所有的Ajax,浏览器事件等,都是通过异步去完成.所谓的同步和异步最大的区别无非就是在于同步会阻塞后续代 ...

  3. [翻译] GCC 内联汇编 HOWTO

    目录 GCC 内联汇编 HOWTO 原文链接与说明 1. 简介 1.1 版权许可 1.2 反馈校正 1.3 致谢 2. 概览 3. GCC 汇编语法 4. 基本内联 5. 扩展汇编 5.1 汇编程序模 ...

  4. Vcomputer简介

    1.Vcompter存储程序式计算机虚拟机软件简介   Vcompter存储程序式计算机虚拟机软件的文件名为comp_alpha(一般要先安装java运行环境,然后双击该软件即可运行),该软件是桂林电 ...

  5. JAVA设计模式——简单工厂

    工厂模式分为三种:简单工厂模式,工厂方法模式,抽象工厂模式.我看有的书上和有的文章里是分为两种,没有简单工厂. 工厂模式主要的作用是:一个对象在实例化的时候可以选择多个类,在实例化的时候根据一些业务规 ...

  6. Express NodeJs Web框架 入门笔记

    Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速地搭建一个完整功能的网 ...

  7. d3.csv()后获取的数据不是数组,而是对象

    我的csv文件: year,population 1953,5.94 1964,6.95 1982,10.08 1990,11.34 2000,12.66 2010,13.40 使用d3.csv()输 ...

  8. shell 中 if then语句中会跟着-ne -ge之类的参数的含义

    if [ 1 -ne 1 ];then...fi这是指当1不等于1时执行then后的语句 -eq:等于-ne:不等于-le:小于等于-ge:大于等于-lt:小于-gt:大于

  9. linux下oracle启动关闭

    1.以oracle身份登录数据库,命令:su – oracle 2.执行以下命令查看数据库监听器的状况: lsnrctl status 3.执行以下命令停止数据库监听器运行: lsnrctl stop ...

  10. SQL Server创建Job, 实现执行相同脚本而产生不同作业计划的探究

    1 . 背景描述 本公司的SQL Server 服务器近百台,为了收集服务器运行的状态,需要在各个实例上部署监控Job,将收集到的信息推送到中央管理服务器. 收集的信息主要包括:慢查询.阻塞.资源等待 ...