logo资料库

基于开源框架Flask的运维监控系统的设计.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
基于开源框架 Flask 的运维监控系统的设计 燕飞宇 王晓明 (渤海大学 信息科学与技术学院,辽宁 锦州 121000) 摘 要:笔者开发一个基于开源框架的运维监控平台的设计过程。该系统采用轻量级的 Web 服务器 mod_wsgi(Apache), 其后端实现建议采用基于 Python 语言的 Flask 开源 Web 框架,进而增强扩展性。数据库建议采用轻量级关系型数据库 Sqlite3,前端页面使用 Bootstrap 框架。平台面向公司或组织的运维管理人员,提供服务器数据记录、动态监视报警、 可视化操作、数据实时展现等功能,目的在于降低运维工作复杂度,满足运维开发(DevOps)人员需求。 关键词:运维开发;DevOps;Python;Flask;Sqlite3 中图分类号:TN943.6  文献标识码:A  文章编号:1003-9767(2016)20-113-03 1 概述 随着运维 2.0 时代的到来,技术运维正在逐渐转变升级 为服务运维,向公司提供专业服务。DevOps 在实际操作中, 其实际操作方法和项目管理的手段是什么样的即具体情况, 几乎无人能有一个完美的答案。DevOps 在最初是让开发、 运维、QA 之间加强沟通,通过不同的工具来消除隔阂。而 隔阂的形成有两个原因,一是信息不对称,部分研发可能无 法获取到运维的数据或者只能获取运维的部分数据而存在盲 点,同时运维无法解读代码的错误信息;二是不同的组织、 集体和个人所秉持观点不同,这直接导致了不同部门之间的 目标有差异。而 DevOps 是倡导大家一起来面对问题、共同 解决问题。实现开发环境和部署环境的快速迁移,帮助产品 快速上线。监控工具越来越多,明确负载问题是计算资源不 足的问题,还是代码质量的问题。 该文旨在简要描述如何根据需求设计一款系统监控平 台,并通过该监控平台实现监控操作系统、数据库和中间件 具体的运行情况,实现基于指标判断不同的情况启动报警, 对数据集中展现和管理。 2 系统设计 2.1 设计思路 该运维监控平台采用 C/S 和 B/S 模式,被监控端通过使 用探针将数据上传至服务器,服务器将收到的数据进行分析 处理和备份;浏览器端将服务器端整合过的数据和分析结果 台服务流程主要包括探针采集数据、数据分析、数据可视化、 设置报警规则、监控报警等。这些模块彼此相互联系,组成 功能强大的监控系统,实现对操作系统、数据库、中间件等 服务和模块的性能监控和应急响应处理。 2.2 开发平台 根据功能需求,平台采用 Flask 框架进行开发。Flask 是 一个用 Python 语言编写的轻量级 Web 应用框架,WSGI 组件 采用 Werkzeug,模板渲染引擎采用 Jinja2。数据库服务使用 Mongo DB 数据库。Mongo DB 是一个基于分布式文件存储 的数据库,由 C++ 语言编写,旨在为 Web 应用提供可扩展 的高性能数据存储解决方案。Mongo DB 是一个介于关系数 据库和非关系数据库之间的产品,是非关系数据库当中功能 最丰富、最像关系数据库的数据库。由于探针采集数据庞大, 数据交换频繁,故选择最像关系型数据库的 Mongo DB。 2.3 数据表的设计 根据功能,设计数据表如下。 User 数据表用来存储管理员和用户的信息,同时起到划 定部门职能等作用。该数据表的字段主要有:(1)_id 域用 来存储管理员用户的唯一性标识符,其在该数据表中根据记 录的不同而不同,同时以自增的形式存在以便唯一地显示用 户信息;(2)group 域用来记录管理员或者用户所在的用户 级别组,在具体的应用中可以有针对性地为不同的用户设计 不同的级别和小组,再通过该字段予以显示;(3)profile 进行拉取,并将其可视化展现给运维管理人员。性能监控平 用来保存管理员的个人详细信息(如姓名、部门、头像等), 作者简介:燕飞宇(1995-),男,辽宁辽中人,本科在读。研究方向:计算机软件开发。 — 113 — 2016年信息与电脑10下-正文.indd 113 2017/2/4 17:00:23 2016年第20期信息与电脑China Computer&Communication软件开发与应用
在 group 的基础上进一步明确管理员或者用户的信息;(4) last_seen 用于记录管理员或者用户最后一次登录的时间,便 于追查管理员和用户对系统信息的获取的同时也能在一定程 度上保证行为安全。 Instance 集合用于存储所有被监控的实例机探针取回的 海量采样数据,实例包括但不限于操作系统、中间件、数据 库服务。该数据表的字段主要包括:(1)_id 用来存储被监 控实例的唯一性标识符,用以区别不同的被监控实例;(2) owner_group[] 列表用于存放所属的管理员组,并且一个实 例可以被多个管理员组所控制;(3)Data 子集用来存放与 实例相关的所有探针发回来的数据记录,其中可以包括 cpu_ percent(通过百分比的形式以数字方式来反映 CPU 使用率 的信息)、lavg1(表示每分钟的 Load Average)、lavg5(按 照 5 分钟的时间段来显示出来的平均值)、lavg15、ip[](实 例有多个 IP 地址,故用列表数据类型来存储)、net_speed_ r(描述网络数据包的下行速率)、net_speed_t(描述网络数 据包的上行速率)、time(反应数据集的采样时间戳)。 Dashboard 表用于存放仪表盘展示页面上的仪表盘组件 配置信息,包括字段有:(1)instance_id 作为与仪表盘绑定 的数据源实例的唯一性标识符,用于区别于仪表盘绑定的不 同的数据源实例;(2)title 用来表示仪表盘的大标题,并且 通过大标题显示内容的大致方向等;(3)module 标记要显 示的数据的来源模块,以便区别来自于不同来源的数据以及 信息等。 Event 表存放着一切发生的事件,如探针信号捕获与丢 失,警报出发时的状态等。其包括字段有:(1)_id 为事件 的唯一编号,不同的事件记录拥有不同值,同时该字段也是 该数据表中任何一条字段所不可或缺的信息和记录;(2) level、title、content 三个字段分别表示为触发的事件的安全 等级、事件的大标题、事件的详细报告(包含报警触发规则 以及触发时实例的状态信息),从不同的角度来描述事件的 发生、发展等;(3)created_at 域记录事件第一次触发时的 时间戳,实质记录了对应事件发生第一次发生的时间;(4) updated_at 对某些特殊事件,随着事件的重复发生相应的刷 新重复触发时间。 Strategy 集合用于记录运维人员自定义的报警规则。主 要包括:(1)_id 为警报策略的唯一性标识符,用以区别 不同的报警策略的标志;(2)instance_id 子集标记了警报 所针对的所有实例编号,区别警报同时根据不同的实例做出 记载;(3)is_enable 为 Boolean 数据类型,标记警报策略 规则的开启 / 关闭状态,其值为整数型数据类型,单数表示 True,双数表示 False;(4)域 module 标记所要监控的模 块,condition 存储警报触发条件,合法的数据如 lt(小于)、 gt(大于)、gte(大于等于)、lte(小于等于)、ne(不等 于)等条件标志;(5)standard 域标记着数据阈值,这样根 据采样得到的数据通过 condition 和 standard 来比较就能定制 触发规则;(6)created_at 记录规则被管理员创建的时间戳, created_by 记录创建该规则的管理员用户编号,这两个直接 记录对应管理员针对此操作的实际行为信息。 需要注意的一点是由于 Mongo DB 不方便直接实现对 Boolean 类 型 数 据 的 控 制, 故 is_enable 列 需 要 用 单 双 数 来 判断规则开启情况,进行切换操作只需要使用 MongoDB 的 API 将 is_enable 加 1 即可进行下一步的操作。 2.4 功能设计 2.4.1 RESTFUL API 设计 这个方面的设计涉及的内容主要有以下几方面。(1) 向 实 例插入采集数据记录的口:http://example.com/rest/add_ data,post 递交的数据格式为 JSON 文件格式,结构如数据 集合 instance 中的 data 域;(2)实例信号请求注册的接口: http://example.com/rest/add_info;(3)拉取实例最近 n 条数据 的接口:http://example.com/rest/get_latest_data/instance_id;(4) 拉取实例最近 N 个小时的数据的接口:http://example.com/rest/ get_data_by_timedelta/instance_id;(5)拉取实例配置信息的 接口:http://example.com/rest/get_info/instance_id。 2.4.2 实例信息概览 该页面展现各个监控实例的基本信息,如服务器实例的 CPU 使用率、IOWait 和 LOAD15 等基础指标,数据每秒进 行一次更新。其页面显示可以以黑色为主要的色调,同时界 面上的字体以白色线条显示以示差别,便于管理员和用户在 实际操作中能够看清楚。并且以内容的概括性说法为大标题, 例如“实例”,而细小的内容部分可以通过小一些的字来显 示,显示的内容可以使用实例的名字、状态、CPU 使用百分 率、IOWait、LOAD15、平台服务等来表示具体的信息含义, 再将信息的内容与含义一一对应地显示出来,以便管理员或 者用户能够获得对应的信息。 2.4.3 自定义仪表盘 随着现在业务的复杂化,一个应用很可能会在多台服务 — 114 — 2016年信息与电脑10下-正文.indd 114 2017/2/4 17:00:23 2016年第20期信息与电脑China Computer&Communication软件开发与应用
器上部署,故而需要同时监控多台服务器,如果只需要看某 高工作效率,建立一套系统科学的运维监控体系是路网平台 一台服务器的某项指标,可以使用仪表盘。用户可以在仪表 集中运维模式下实现精细化管理的基础,也是系统运维监控 盘页面自定义多个数据指标图表,支持任意时间段数据查询, 默认显示最近 30 分钟内的数据,用户可以自定义具体时间段。 2.4.4 报警策略 引入各种服务的报警事件,也可以针对自身的主机监控 和平台服务监控,管理报警事件。当 CPU 利用率过高,或者 第三方 API 的可用性达到某个触底阈值时,则会触发报警条 件,发出警报,并且通过邮件、短信等多种渠道,流转到具 体的承责人员身上。 的最终目标。 本文的研究仅仅是一种建议,实质上为众多运维监控 系统设计中的一小部分,其描述了一个基于开源框架的运维 监控平台的设计过程。系统采用轻量级的 Web 服务器 mod_ wsgi(Apache),后端实现采用基于 Python 语言的 Flask 开 源 Web 框架,进而获得扩展性良好的优势,数据库采用轻量 级关系型数据库 Sqlite3,前端页面使用 Bootstrap 框架。然 而本文所讨论的内容局限在设计过程,对具体实现如何编码、 在具体报警策略的显示中,按照与“实例信息浏览”页 编码过程中应该使用的具体技术等并没有加以讨论,有待日 面类似的方式通过黑色的背景白色的字和内容来突出显示相 后完善。 关信息,而对于按钮可以采用的色彩则以灰色和红色两种并 且加以区分。内容采用状态、名称、创建人、指标、TAGS、 参考文献 最后触发值、最后触发时间等,以便能够描述清晰对应的策 [1] 李淑娟 , 赵泽宇 , 宓泳 . 信息化校园应用的运维监控 略,具体的信息和参数等则依然采用“实例信息描述”类似 的方式与状态、名称、创建人、指标、TAGS、最后触发值、 保障研究 [J]. 实验技术与管理 ,2008(8):11-14. [2] 王桂叔 . 基于 ITIL 的运维监控智能管理平台建设与 最后触发时间几种表示含义的一一对应再显示出来,以便管 应用 [J]. 软件产业与工程 ,2014(1):39-42. 理员或者用户获悉信息。 3 结 语 性能监控的意义在于让运维变得高效、智能。团队沟通、 协作的根本目的也在于通过一切方式提高效率。该自动化监 视平台帮助大家一起来面对问题、解决问题,通过可视化图 表及报警功能及时发现性能问题。 然而系统运维从来都没有一劳永逸的解决方案。立足于 业务需求,制定出属于自己的一套方案,为其他所有业务系 统提供一个最为坚实的基础,降低管理人员的工作强度,提 [3] 雷晓萍 , 马君 , 苏蔚 . 信息运维监控一体化平台的自 主研发与应用 [J]. 信息技术与信息化 ,2015(4):214-216. [4] 马锐 . 基于监控平台的信息化运维管理平台设计 [J]. 信息网络安全 ,2013(10):161-163. [5] 管东升 , 李俊安 . 信息化大运维监控管理平台的方案 探讨 [J]. 信息系统工程 ,2013(4):113-117. [6] 何世有 . 基于业务数据研究的证券运维监控系统 [J]. 中国科技信息 ,2014(15):143-146. — 115 — 2016年信息与电脑10下-正文.indd 115 2017/2/4 17:00:23 2016年第20期信息与电脑China Computer&Communication软件开发与应用
分享到:
收藏