admin 管理员组文章数量: 1184232
2024年3月13日发(作者:nagios搭建)
2016年第20期
信息与电脑
China Computer&Communication
软件开发与应用
基于开源框架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 开发平台
根据功能需求,平台采用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
用来保存管理员的个人详细信息(如姓名、部门、头像等),
该文旨在简要描述如何根据需求设计一款系统监控平
台,并通过该监控平台实现监控操作系统、数据库和中间件
具体的运行情况,实现基于指标判断不同的情况启动报警,
对数据集中展现和管理。
2 系统设计
2.1 设计思路
该运维监控平台采用C/S和B/S模式,被监控端通过使
用探针将数据上传至服务器,服务器将收到的数据进行分析
处理和备份;浏览器端将服务器端整合过的数据和分析结果
进行拉取,并将其可视化展现给运维管理人员。性能监控平
作者简介:
燕飞宇(1995-),男,辽宁辽中人,本科在读。研究方向:计算机软件开发。
— 113 —
软件开发与应用
信息与电脑
China Computer&Communication
2016年第20期
在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)
向实例插入采集数据记录的口:/rest/add_
data,post递交的数据格式为JSON文件格式,结构如数据
集合instance中的data域;(2)实例信号请求注册的接口:
/rest/add_info;(3)拉取实例最近n条数据
的接口:/rest/get_latest_data/instance_id;(4)
拉取实例最近N个小时的数据的接口:/rest/
get_data_by_timedelta/instance_id;(5)拉取实例配置信息的
接口:/rest/get_info/instance_id。
2.4.2 实例信息概览
该页面展现各个监控实例的基本信息,如服务器实例的
CPU使用率、IOWait和LOAD15等基础指标,数据每秒进
行一次更新。其页面显示可以以黑色为主要的色调,同时界
面上的字体以白色线条显示以示差别,便于管理员和用户在
实际操作中能够看清楚。并且以内容的概括性说法为大标题,
例如“实例”,而细小的内容部分可以通过小一些的字来显
示,显示的内容可以使用实例的名字、状态、CPU使用百分
率、IOWait、LOAD15、平台服务等来表示具体的信息含义,
再将信息的内容与含义一一对应地显示出来,以便管理员或
者用户能够获得对应的信息。
2.4.3 自定义仪表盘
随着现在业务的复杂化,一个应用很可能会在多台服务
— 114 —
2016年第20期
信息与电脑
China Computer&Communication
软件开发与应用
器上部署,故而需要同时监控多台服务器,如果只需要看某
一台服务器的某项指标,可以使用仪表盘。用户可以在仪表
盘页面自定义多个数据指标图表,支持任意时间段数据查询,
默认显示最近30分钟内的数据,用户可以自定义具体时间段。
2.4.4 报警策略
引入各种服务的报警事件,也可以针对自身的主机监控
和平台服务监控,管理报警事件。当CPU利用率过高,或者
第三方API的可用性达到某个触底阈值时,则会触发报警条
件,发出警报,并且通过邮件、短信等多种渠道,流转到具
体的承责人员身上。
在具体报警策略的显示中,按照与“实例信息浏览”页
面类似的方式通过黑色的背景白色的字和内容来突出显示相
关信息,而对于按钮可以采用的色彩则以灰色和红色两种并
且加以区分。内容采用状态、名称、创建人、指标、TAGS、
最后触发值、最后触发时间等,以便能够描述清晰对应的策
略,具体的信息和参数等则依然采用“实例信息描述”类似
的方式与状态、名称、创建人、指标、TAGS、最后触发值、
最后触发时间几种表示含义的一一对应再显示出来,以便管
理员或者用户获悉信息。
高工作效率,建立一套系统科学的运维监控体系是路网平台
集中运维模式下实现精细化管理的基础,也是系统运维监控
的最终目标。
本文的研究仅仅是一种建议,实质上为众多运维监控
系统设计中的一小部分,其描述了一个基于开源框架的运维
监控平台的设计过程。系统采用轻量级的Web服务器mod_
wsgi(Apache),后端实现采用基于Python语言的Flask开
源Web框架,进而获得扩展性良好的优势,数据库采用轻量
级关系型数据库Sqlite3,前端页面使用Bootstrap框架。然
而本文所讨论的内容局限在设计过程,对具体实现如何编码、
编码过程中应该使用的具体技术等并没有加以讨论,有待日
后完善。
参考文献
[1]李淑娟,赵泽宇,宓泳.信息化校园应用的运维监控
保障研究[J].实验技术与管理,2008(8):11-14.
[2]王桂叔.基于ITIL的运维监控智能管理平台建设与
应用[J].软件产业与工程,2014(1):39-42.
[3]雷晓萍,马君,苏蔚.信息运维监控一体化平台的自
主研发与应用[J].信息技术与信息化,2015(4):214-216.
[4]马锐.基于监控平台的信息化运维管理平台设计[J].
信息网络安全,2013(10):161-163.
[5]管东升,李俊安.信息化大运维监控管理平台的方案
探讨[J].信息系统工程,2013(4):113-117.
[6]何世有.基于业务数据研究的证券运维监控系统[J].
中国科技信息,2014(15):143-146.
3 结 语
性能监控的意义在于让运维变得高效、智能。团队沟通、
协作的根本目的也在于通过一切方式提高效率。该自动化监
视平台帮助大家一起来面对问题、解决问题,通过可视化图
表及报警功能及时发现性能问题。
然而系统运维从来都没有一劳永逸的解决方案。立足于
业务需求,制定出属于自己的一套方案,为其他所有业务系
统提供一个最为坚实的基础,降低管理人员的工作强度,提
— 115 —
版权声明:本文标题:基于开源框架Flask的运维监控系统的设计 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1710290132a566326.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论