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   —


本文标签: 数据 运维 监控 信息 实例