郭宏泽-《Python开发36计》之企业级运维平台开发实战

五锐智

2018/05/13 发布于 技术 分类

很高兴到 DevOps 论坛给大家做一个分享,我这次分享的是我开发的一个运维管理工具,这次分享中介绍一下我开发这个工具的心得体验和一些想法,希望这些能给大家带来帮助。 运维发展的很长时间,从十几年前的运维到今天已经有了很多改变。今天的角度来看运维站在十字路口,前面有很多方向,很多新的任务和分享需要我们去做,有很多问题需要我们解决,有很多我们要勇于尝试的技术和探索。 这么多年来看运维从手工运维转到脚本运维,转到自动化运维,今天我带来的是在运维过程中总结的一些经验和我们如何去从零开始开发一套基于 Python 的运维平台。

文字内容
1. GOPS 全球运维大会 2018 2018.4.13-4.14 中国·广东·深圳·南山区 圣淘沙大酒店(翡翠店) GOPS 全球运维大会2018·深圳站
2. Python开发36计之企业级运维平台开发实战 郭宏泽 技术总监 GOPS 全球运维大会2018·深圳站
3. 目录 1 平台规划 2 技术细节 3 功能模块 4 开发心得 GOPS 全球运维大会2018·深圳站
4. 企业运维难点 系统架构 随着IAAS云化,容 器化,PAAS智能化, 依赖库多样化, RUNTIME复杂化, 运维人员无法应对新 时代的运维要求。 技术债务 由于资源成本压力, 中小企业的IT运维及 IT系统存在大量历史 债务,其结果就是在 产品和服务上无法满 足需求,形成恶性循 环 人员流动 由于系统的混乱,高 层不懂技术,导致牛 人招请不起,技术好 的招不来,来了待不 久,技术人员流动率 大,系统稳定性,可 持续性极差。 战略规划 大多中小企业没有IT 战略规划,在IT资源 投入上分配不合理, 该花钱的没花,不该 花的浪费严重,技术 团队无法支撑企业IT 的实际要求。 GOPS 全球运维大会2018·深圳站
5. 运维架构的演进 智能报警、数据分析 自动化平台化 ITIL流程 配置管理 分工模糊 智能运维 运维平台 流程系统 脚本工具 手工运维 GOPS 全球运维大会2018·深圳站
6. 运维平台开发理念 敏捷开发 快速迭代 完善测试 平台设计理念 GOPS 全球运维大会2018·深圳站 模块化开发 不断重构 经验沉淀
7. 运维模块 部署自动化 配置自动化 巡检自动化 作业管理 故障自愈 部署流水线 监控模块 基础监控 系统监控 应用监控 业务监控 服务监控 终端监控 安全模块 准入管理 用户管理 权限管理 角色管理 授权管理 操作审计 流程模块 事件管理 变更管理 资源管理 发布管理 知识管理 流程规范 智能模块 数据分析 事件分析 性能分析 趋势预测 智能决策 ChatOps 运营模块 设备采购 合同管理 成本管理 预算管理 运营报表 考核管理 应用配置 软件包 配置文件 运维平台API 监控属性 业务属性 架构属性 资产管理 IDC Network Server 虚拟化 CDN GOPS 全球运维大会2018·深圳站 权限属性 操作系统 运营属性 DNS
8. uPython+Django+Mysql+Redis+MongoDB GOPS 全球运维大会2018·深圳站
9. 1、Requests 2、Forward 3、Call 4、ORM 5、Return Data 6、Templete 7、Render 8、Response URLController Models Database 数据平面 GOPS 全球运维大会2018·深圳站 VIEW 控制平面 Template Static 展现平面
10. 前端资源 u Adminlte 主体框架 u Bootstrap 图形条目 u Jquery 特效应用 u font-awesome 图标字体 u Layer 弹窗组件 u Echarts 监控图表 GOPS 全球运维大会2018·深圳站
11. 资产管理 GOPS 全球运维大会2018·深圳站
12. CMDB表结构设计 ü Host 服务器 ü Group 服务器组 ü IDC 所在机房 ü Cabinet 机柜 ü Asset_type 资产类型 ü Asset_status 资产状态 ü 产品线 ü 工程 ü 负责人 ü 认证中心 GOPS 全球运维大会2018·深圳站
13. 基于CMDB的应用配置信息 GOPS 全球运维大会2018·深圳站
14. CMDB整合ANSIBLE GOPS 全球运维大会2018·深圳站
15. Agent上报接口 ü 使用Django HTTP SERVER而非Socket ü 使用Http Post方法上传 ü 使用Json传递数据 ü 数据处理后直接插入数据库 @token_verify() def collect(request): asset_info = json.loads(request.body) if request.method == 'POST': vendor = asset_info['vendor'] disk = asset_info['disk'] cpu_model = asset_info['cpu_model'] host.save() GOPS 全球运维大会2018·深圳站
16. Agent设计原则 ü Python 2.7兼容3.x语法 ü Shell直接提取数据 ü Psutil数据采集 ü 其它数据采集(SNMP) ü 使用Http Post Json数据到服务器API接口 ü Schedule 循环采集 ü 使用Systemd或supervisor进程守护 GOPS 全球运维大会2018·深圳站
17. Json上报监控信息 { 'mem': { 'available': 2798, 'used': 764, ……………… }, 'hostname': 'adminset', 'token': 'eMRdmYHXcb3P', 'net': [{ 'nic_name': 'lo', 'traffic_out': 5, 'traffic_in': 5 }, { }], GOPS 全球运维大会2018·深圳站 'disk': [{ }, 'cpu': { } 'mountpoint': '/', 'total': 57.78, 'used': 5.12, 'free': 52.66, 'percent': 8.9 'softirq': 0.0, 'percent': 2.5, 'lcpu_percent': [1.0, 5.0], 'system': 0.0, }
18. def token_verify(): def decorator(view_func): def _wrapped_view(request, *args, **kwargs): set_token = get_dir('token') error_info = "Post forbidden, your token error!!" if request.method == 'POST': post_token = json.loads(request.body) if set_token == post_token["token"]: return view_func(request, *args, **kwargs) else: return HttpResponse(error_info, status=403) return HttpResponse(error_info, status=403) return _wrapped_view GOPS 全球运维大会2018·深圳站
19. 任务调度中心 GOPS 全球运维大会2018·深圳站
20. 异步任务处理 任务1 任务2 任务3 Tasks 任务4 GOPS 全球运维大会2018·深圳站 Broker work1 work2 work3 work4
21. 编写监控模块 ü 不要使用关系型数据库存储监控数据 ü 推荐使用influxdb rrdtool prometheus存储监控数据 ü 本例使用mongodb进行存储监控数据 ü 使用Echarts或Grafana图表展现 ü 使用Json数据传递 ü 使用JS异步回调实时刷新数据 GOPS 全球运维大会2018·深圳站
22. Agent上报模式 Agent Agent MQ Agent GOPS 全球运维大会2018·深圳站 Echarts 运S平erv台er化 DB
23. 自动发现的监控平台 GOPS 全球运维大会2018·深圳站
24. 持续交付 GOPS 全球运维大会2018·深圳站
25. AdminSet • 基于Python Django1.11开发的自动化运维平台,主要功能:资 产管理、任务编排、持续交付、系统监控、运维管理、配置管理。 • Github • https://github.com/guohongze/adminset GOPS 全球运维大会2018·深圳站
26. Thanks 高效运维社区 开放运维联盟 荣誉出品 GOPS 全球运维大会2018·深圳站
27. 想第一时间看到高效运维社区 的新动态吗? GOPS 全球运维大会2018·深圳站