如何基于Python构建一个可扩展的运维自动化平台

嘉宾简介

刘天斯

从事互联网运维工作已13年,目前就职于腾讯-互动娱乐部,负责游戏大数据的运营,曾就职于天涯社区,担任首席架构师/系统管理员。

热衷开源技术的研究,包括系统架构、运维开发、负载均衡、缓存技术、数据库、NOSQL、分布式存储、消息中间件、大数据及云计算、Mesos、Docker、DevOps等领域。擅长大规模集群的运维工作,尤其在自动化运维方面有着非常丰富的经验。同时热衷于互联网前沿技术的研究,活跃在国内社区、业界技术大会,充当一名开源技术的传播与分享者。

导言

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

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

为什么选择Python?

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

Python在腾讯的现状,根据去年内部提交组件语言统计,除去2、3、4前端技术,Python在高级编程语言中排第3位。应用在系统运维、业务逻辑、运营平台、测试工具、数据挖掘等领域,腾讯大名鼎鼎的“蓝鲸”运维PAAS平台就是基于Python语言来构建。

一、平台介绍

OMServer 一个集中式的Linux集群管理(基础)平台(《Docker技术与最佳实践》书籍实践案例),具备业务集群管理、实时安全审计、功能模块定制、数据加密传输、支持主流Python组件、使用简单且体验好等特点,源码托管地址:https://github.com/yorkoliu/pyauto,大家可以根据企业的需求定制修改及发布。

1、平台截图:

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

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

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

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

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

二、平台架构设计

1、  OMServer架构图

大家对这个架构应该不会感到陌生,三层结构也是目前主流的运营平台架构。


2、  架构说明

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

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

2)、第二层:分布式计算层,提供与主控端的连接通道,采用的是rpyc传输协议,协议操作流程:前端模块参数->加密传输->任务执行->返回结果集->解密输出。

3)、第三层:集群管理服务层,整合Python主流的远程操作组件(支持Saltstack、Anaible、Func),对被控端(业务服务器集群)进行管理,其中主控端可以根据不同IDC环境,采用多地多点的管理方式,可提升冗余度及执行效率。主控端操作模块以不同Python文件加以区分,便于维护,可灵活定制操作逻辑及横向扩展等特点。

3、  平台架构优势

1)管理端多机支持,可按不同IDC划分;

2)安全性高,加密传输、定义私有通讯规范(TCP);

3)支持多种管理客户端接入(WEB、桌面、移动);

4)调用Python组件的高级特性(Playbook、State);

5)功能扩展性能力强,模块定制化。

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、当我们的平台已经具备可定制、扩展操作的能力,运维的核心工作就聚焦以下几点:

1)平台功能改进、升级,需要具备DevOps能力;

2)根据业务运营需求,做任务功能模块的编写的工作;

3)日常工作梳理(标准、流程化建设),更好将原子操作串成流程。

4)系统、业务的调优,服务业务。

四、安全审计的实现

1、  安全审计技术架构

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

2、Agent上报实现原理

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

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

五、C/S结构的实现

1、  OMServer桌面版截图

2、OMServer桌面版架构

桌面版OManager基于Wxpython + XRC构建,为两层结构,一层为桌面客户端,另一层为集群管理端,同时兼容OMServer管理端,通讯依然采用rpyc协议,与OMServer有以下几点区别:

3、后续优化

1)整合ansible或saltstack高级功能,如ansibleplaybook;

2)将多个任务模块打包成模板对列,实现原子操作与运维变更流程的结合;

3)引用任务调度Celery,支持更大并发;

4)任务对列支持暂停、中止、重运行功能,实现操作可控。

5)提供与CMDB访问对接,通用性更强。

Q&A

Q1:个人可以完成运维自动化平台吗,需要哪些技术?


当然可以,腾讯内部对运维人员都有一个要求,就是要具备开发能力。Python简单,容易入手,强烈推荐。

Q2:分享中有提到 CS 架构中安全性高,请问具体高在哪些方面,是什么原因呢?

一般CS客户端部署在管理员电脑,通过私有网络、协议与主控端效互,B/S部署在节点与业务集群同区域,不一样同网段,另外黑客对WEB层的攻击远高于桌面客户端,网络隔离在这时候显得尤为重要了。

Q3:自行研发tglog对于海量日志传输是否主要走的udp协议?如果是走的udp协议,怎么去解决一些数据包传输中数据乱序以及数据反序列化问题,或者做了哪些协议层面的优化?

是的,主要走的是UDP协议。tglog同时也是一套数据日志的规范,约束开发人员打日志的标准。

目前未碰到数据乱序以及数据反序列化问题,以前面临一个比较大的问题是丢包情况,尤其在流量高峰期时段更为明显。

后面在内核、IO优化得到缓解,但无法规避,所以我们对比较重要的日志采用TCP传输。比如玩家消费流水。

Q4:规范化、标准化遇到最大问题是什么?我们遇到就是无法行政干涉开发如何写代码?有什么好的方式去引导规范?尤其是开发有很繁重的开发任务.

这已经不是运维层面推动的事情,必须升级到运维及开发的上层领导,开发任务繁重不是理由,上线后出问题一样得不偿失,提前抛出风险,让开发人员认真做好上线前的评估。

Q5:运维管理系统安全性这块有什么好的思路?

1、网络的隔离,避免直接暴露在公网;

2、办公电脑需要有一套标准的日常安全规范,尤其是运维办公机;

3、平台编码人员需要有较好的安全意识;

4、多关注业界安全、漏洞事件。

==========================================

欢迎关注 Reboot教育  Python实战班(4月17日开班)

课程详情点击:http://www.51reboot.com/course/actual/

上课形式:面授班 / 网络直播班

咨询QQ:979950755  /  279312229

时间: 2024-10-08 16:32:44

如何基于Python构建一个可扩展的运维自动化平台的相关文章

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

导语: 今天与大家一起探讨如何基于Python构建一个可扩展的运维自动化平台,也希望能与大家一起交流,共同成长. 此次分享将通过介绍OMServer.OManager具备的功能.架构设计.模块定制.安全审计.C/S结构的实现等几个方面的内容来展开. 为什么选择Python? 默认安装且跨平台 可读性好且开发效率高 丰富的第三方库(开发框架.各类API.科学计算.GUI等) 社区活跃&众多开发者. Python在腾讯的现状,根据去年内部提交组件语言统计,除去2.3.4前端技术,Python在高级编

全新SaaS运维监控平台构建书

第一部分 引言 伴随的IT服务的发展,IT服务的概念也在发生着巨大的变化.IT运维服务已经由原来局限在用户自身环境下的IT服务,延伸到覆盖公用云.私有云.外包服务商等多纬度.全天候的SaaS运维模式, 从狭义理解,IT服务仅仅是为了解决信息系统出现的故障,在系统出现停顿的时候可以快速的恢复.而目前的IT服务已经包含了更多的内容,IT服务渗透在信息系统的整个生命周期之中.本文基于该理念,对IT服务系统的实现进行分析研究.文章基于网脊运维通SaaS(Software as aService)模式理念

基于Grunt构建一个JavaScript库

现在公认的JavaScript典型项目需要运行单元测试,合并压缩.有些还会使用代码生成器,代码样式检查或其他构建工具. Grunt.js是一个开源工具,可以帮助你完成上面的所有步骤.它非常容易扩展,并使用JavaScript书写,所以任何为JavaScript库或项目工作的人都可以按自己的需要扩展它. 本文解释如何使用Grunt.js构建JavaScript库.Grunt.js依赖Node.js和npm,所以第一节解释其是什么,如何安装和使用.如果你对npm有了解,那你可以跳过这一节.第四和第五

基于Python完成一个hello/hi的简单的网络聊天程序

一.Socket 套接字简介 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.网络套接字是IP地址与端口的组合. 传输层实现端到端的通信,因此,每一个传输层连接有两个端点.那么,传输层连接的端点是什么呢?不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口.传输层连接的端点叫做套接字(socket).根据RFC793的定义:端口号拼接到IP

用python+django+twistd 开发一个属于自己的运维系统

开源的运维系统不少,比如nagios.zabbix.cati等等,但是遇到自己个性化的运维需求的时候,总是显的力不从心!最近在学习python,所以就考虑用python+django+twisted来定做一个完全个性化的运维系统. 运维系统有几个主要的功能:监控.分析.报警.更甚者直接根据分析的结果进行反应操作.而以上几点通过上述的框架可以比较容易的实现. 下面上图说明: 使用freemind整理了下思路: 下面是一些代码段,完整的代码下载见文档底部: Server: #!/usr/bin/en

乌云章华鹏:如何构建高效的安全运维服务平台

如何构建高效的安全运维服务平台 大家好,我是乌云的章华鹏,今天和大家分享的话题是"高效安全运维服务平台的构建",包括:企业的数据安全问题,运维安全中面临的网络.系统服务.应用相关配置等问题. 企业安全的核心是数据安全 当我们在讨论如何构建安全运维服务平台之前,我们需要考虑的问题是构建这样一个平台的核心需求是什么?核心需求是帮助企业解决安全风险,避免因为安全风险带来的业务损失. 我们都知道对于一个依赖互联网的企业来说,数据是企业的核心资产,那么归根结底,其实企业安全的核心是数据安全,所以

一个开发眼中的运维

在云计算时代,开发和运维的结合变得越来越重要.在 DIFF论坛第一期,前新浪SAE运维主管, 郑志勇,分享了<一个开发眼中的运维>根据自己从开发人员转型运维之后的心得,谈如何把在开发上的运用抽象思维方式运用到运维领域. 1. 运维不是什么? 运维不是打杂的,运维不是客服,运维也不是服务开发的,但要做好合作. 2. 运维是什么? 运维服务于整个产品,保证架构合理,系统稳定.运维只对业务稳定负责,所有的工作都是奔着这个去的. 3. 你如何写程序,写程序的目的是什么? 程序是为了完成特定的功能.为了

编写一个BAT脚本协助运维人员遇到问题时候调测数据库是否有效连接成功的操作攻略

简单摘要: 1.内网系统出现故障需要排查 2.运维人员不熟悉数据库操作,没法通过连接数据库和执行SQL语句的方式排查数据库及数据是否正常 3.解决方案:编写一个bat脚本,运维人员双击运行即可.   原文链接: http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetail.aspx?id=d861e977-87d1-4ac0-ab63-91dacb9ccc9e 背景说明: 车辆管理系统涉及2台服务器: 101:数据

Apache thrift - 使用,内部实现及构建一个可扩展的RPC框架

本文首先介绍了什么是Apache Thrift,接着介绍了Thrift的安装部署及如何利用Thrift来实现一个简单的RPC应用,并简单的探究了一下Thrift的内部实现原理,最后给出一个基于Thrift的可扩展的分布式RPC调用框架,在中小型项目中是一个常见的SOA实践. Thrift介绍 Apache Thrift是Facebook 开发的远程服务调用框架,它采用接口描述语言(IDL)定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中,如 C++, Java,