专栏首页北京马哥教育实战:基于Python构建运维自动化平台

实战:基于Python构建运维自动化平台

导语:

今天与大家一起探讨如何基于Python构建一个可扩展的运维自动化平台,也希望能与大家一起交流,共同成长。

此次分享将通过介绍OMServer、OManager具备的功能、架构设计、模块定制、安全审计、C/S结构的实现等几个方面的内容来展开。

为什么选择Python?

  • 默认安装且跨平台
  • 可读性好且开发效率高
  • 丰富的第三方库(开发框架、各类API、科学计算、GUI等)
  • 社区活跃&众多开发者。

Python在腾讯的现状,根据去年内部提交组件语言统计,除去2、3、4前端技术,Python在高级编程语言中排第3位。

应用在系统运维、业务逻辑、运营平台、测试工具、数据挖掘等领域,腾讯大名鼎鼎的“蓝鲸”运维PAAS平台就是基于Python语言来构建的。

一、 平台介绍

OMServer 一个集中式的Linux集群管理(基础)平台,具备业务集群管理、实时安全审计、功能模块定制、数据加密传输、支持主流Python组件、使用简单且体验好等特点。

1、平台截图

2、平台采用到的第三方库

Django : 一个开放源代码的Web应用框架,由Python写成,采用了MVC的软件设计模式;

rpyc : 一个 Python 实现的RPC和分布式计算的工具。支持同步和异步操作、回调等;

saltstack 、ansible 、func : 基本Python开发的自动化配置管理与流程控制组件;

Mysql : 是一个非常流行的关系型数据库管理系统。

二、 平台架构设计

1、OMServer架构图

2、架构说明

OMServer平台为三层架构,分别为WEB交互层、分布式计算层、集群管理服务层。

第一层:即为WEB交互层,典型的B/S架构,以供管理员操作的交互平台,也是OMServer的核心,基于Django开发;

第二层:分布式计算层,提供与主控端的连接通道,采用的是rpyc传输协议。

协议操作流程:

前端模块参数->加密传输->任务执行->返回结果集->解密输出。

第三层:集群管理服务层,整合Python主流的远程操作组件(支持Saltstack、Anaible、Func),对被控端(业务服务器集群)进行管理,其中主控端可以根据不同IDC环境,采用多地多点的管理方式,可提升冗余度及执行效率。

主控端操作模块以不同Python文件加以区分,便于维护,可灵活定制操作逻辑及横向扩展等特点。

3、平台架构优势

管理端多机支持,可按不同IDC划分; 安全性高,加密传输、定义私有通讯规范(TCP); 支持多种管理客户端接入(WEB、桌面、移动); 调用Python组件的高级特性(Playbook、State); 功能扩展性能力强,模块定制化。

4、架构操作流程

上图将三个层次的交互流程进行串连,可以清晰了解OMServer架构的操作流程,结束了传统式直连APP Server的操作,更加规范我们的操作事件,一定程度可以避误一些潜在的误操作。

5、整合远程操作Python组件

分两步:

  1. 提前配置主控端与被控端的信任关系,一般为证书或SSH 认证;
  2. 通过OMServer主控端封装好的任务模块与API接口,实现定制化的任务下发及执行。

三、 平台模块定制

1、任务模块定制的思路

1)任务模块:即为一个“操作事件”为颗粒的任务,如重载配置、部署缓存服务、停止Nginx服务等原子操作;

2)添加模块的步骤

① 定义任务模块“输入参数”,采用HTML Form元素,可以为输入、下拉、单复选框等元素;

② 编写后台模块代码,其中执行部分由Saltstack或Ansible的Client_API来实现;

③ 任务模块核心代码,只需要5行代码就可以实现一个SHELL脚本下发、执行的功能。

3)运行模块的步骤 : 选择任务模块 & 操作对象 -> 指定输入参数 -> 运行 -> 返回执行结果。

2、当我们的平台已经具备可定制、扩展操作的能力,运维的核心工作就聚焦以下几点:

  • 平台功能改进、升级,需要具备DevOps能力;
  • 根据业务运营需求,做任务功能模块的编写的工作;
  • 日常工作梳理(标准、流程化建设),更好将原子操作串成流程;
  • 系统、业务的调优,服务业务。

四、安全审计的实现

1、安全审计技术架构

安全审计功能模块分两部分,一部分为操作事件前台展示,另部分为部署在服务器侧的采集Agent,通过CGI接口上报至数据库存储,可对上报的数据作关键字监控,发现异常可以触发告警。

2、Agent上报实现原理

① 实现原理非常简单,通过修改Linux系统环境配置文件/etc/profile,定义history事件相关环境变量,捕捉所有Linux登录用户会话中的操作事件及指令,实时通过OMAudit_agent.py中的HTTP GET CGI向数据库写操作事件流水。

② 管理前台页面通过定时刷新,获取最新的操作事件。

五、C/S结构的实现

1、OManager桌面版截图

2、OManager桌面版架构

3、后续优化

  • 整合ansible或saltstack高级功能,如ansible playbook;
  • 将多个任务模块打包成模板对列,实现原子操作与运维变更流程的结合;
  • 引用任务调度Celery,支持更大并发;
  • 任务对列支持暂停、中止、重运行功能,实现操作可控;
  • 提供与CMDB访问对接,通用性更强。

本文分享自微信公众号 - 马哥Linux运维(magedu-Linux),作者:云豆

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-03-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python+树莓派 制作简单黑客工具U-disk-thief(U盘小偷)

    最近一直在学习Python爬虫,可能随着研究的深入,受到爬虫技术的感染,开始对获取别人的数据产生了兴趣,Python写网页爬虫是获取别人网站上的数据,那可不可以...

    小小科
  • 亿级别PV的大型互联网公司运维架构演变

    9月24日,第三届GOPS全球运维大会在上海雅悦新天地圆满落幕,全球运维大会是国内第一个运维行业大会,马哥教育作为唯一参加运维自媒体联盟的培训机构,携手各大互联...

    小小科
  • Python风靡全宇宙,首要原因是它?

    就让我们从近年来大数据的兴起说起,为你娓娓道来Python火爆的真正原因。 众所周知,Python是目前使用最广泛且用户增长最快的编程语言。优雅简洁的语法、强...

    小小科
  • MySQL错误:ERROR 1221 (HY000): Incorrect usage of UNION and ORDER BY

    MySQL版本:Ver 14.14 Distrib 5.1.61, for redhat-linux-gnu (x86_64)

    Dabelv
  • [Python程序]扫描出内网数据库并写入xlsx中(修正版)

    昨天的推送后来发现有问题,由于将判断是否没有端口开放的变量opened放在for循环里面,这样每次都重置为0,从而导致每个IP都多出来一行no DBs foun...

    bsbforever
  • 13位Python大牛历时一个月打造的Python系统学习流程图,超详细!

    对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系...

    公众号---志学Python
  • [Python程序]扫描出内网数据库并写入xlsx中

    bsbforever
  • 从ThoughtWorks 2017技术雷达看微软技术

    张善友
  • 从ThoughtWorks 2017技术雷达看微软技术

    ThoughtWorks在每年都会出品两期技术雷达,这是一份关于技术趋势的报告,它比起一些我们能在市面上见到的其他各种技术行情和预测报告,更加具体,更具可操作性...

    张善友
  • Nginx系列:安全下载模块

    ngx_http_secure_link_module模块用于检查请求链接的真伪,保护资源免受未经授权的访问,限制链接的生命周期。

    java乐园

扫码关注云+社区

领取腾讯云代金券