连 娜
(山西职业技术学院,山西 太原 030006)
现阶段,面向高并发场景的软件系统普遍采用了服务器集群作为部署和运行平台,而在现有的针对Windows服务器的远程管理中,用户普遍采用以Team View、向日葵为代表的计算机管理软件以远程登录的方式进行服务器工作状态监控和管理[1]。但作为远程控制软件,其主要功能集中在对单台服务器远程操作与配置方面,并不适用于对大量服务器同时进行实时监控并进行数据归集汇总的应用场景。本文提出了一种基于微信小程序框架的轻便型应用程序设计方案,能够满足随时随地监测服务器集群运行状态的应用需求,有效简化了服务器集群运行维护工作的复杂度并提升了工作效率。
在服务器集群的运维管理工作中,管理人员在根据实际运行情况及时调整集群工作模式、更新负载均衡方案以及分析集群故障原因时,都需要能够实时掌握各节点服务器的运行数据作为参考依据。现有的远程控制软件,仅能通过逐一远程登录各节点服务器后查看各项运行信息,步骤繁琐、耗时长且需要通过电脑操作,工作场地的局限性大且信息滞后、实时性差[2]。因此需要提供能够在智能手机中运行的应用程序,在实现批量采集服务器运行信息功能的同时具备良好的数据实时显示功能。微信小程序作为腾讯公司发布的新一代手机应用开发框架,具有使用便捷、响应速度快以及便于更新和维护等优势,且无需安装专用的APP程序,在解决了手机硬件兼容性问题的同时还节省了大量的手机存储空间,非常适用于服务器集群运行数据实时监控管理软件的开发。因此,在本文设计的服务器运行实时监控平台方案中,以微信小程序开发框架为核心整合Python与PHP语言以及SQL Server数据库技术,完成服务器运行数据的采集存储、汇总处理与实时显示功能。
服务器运行实时监控平台的整体架构如图1所示,共由4个部分构成,包括监控程序、管理服务器、微信小程序模块与管理平台模块。
图1 系统架构图
监控程序被部署在服务器集群的各节点上,负责采集各台服务器主机的实时工作状态数据并上传至管理服务器的数据库中。管理服务器作为平台的核心模块,负责数据的自动归集与可靠存储,并在此基础上面向用户提供数据访问接口。微信小程序模块负责从服务器中实时获取集群中所有服务器的运行数据并批量显示在用户端的微信小程序中。管理平台模块负责面向管理人员提供日常运行管理所需的数据管理、分析等相关功能。
监控程序被安装在集群中的各个节点服务器上并设置为开机自动运行模式,根据固定的间隔时间获取服务器当前的CPU、内存使用率、网络连接与带宽占用情况等数据并且在将数据打包为Json格式后发送至管理服务器的数据上传接口中,监控程序主要基于Python的Psutil库实现。
管理服务器中包含后台数据库与数据上传接口、用户接口及管理接口程序,数据上传接口在收到监控程序所提交的信息后,首先对数据内容进行有效性校验,滤除错误与重复数据后,将数据添加至后台数据库中存储;用户接口在收到微信小程序模块的数据请求并校验其身份后,在数据库中进行检索并实时返回结果数据至微信小程序模块;管理接口在接收到管理平台模块所提交的操作请求并验证其身份后,在数据库中执行数据更新、检索操作并返回执行结果。管理服务器基于部署在公共网络中的云服务器搭建,后台数据库使用SQL Server搭建、数据上传与访问接口使用PHP+Apache框架创建Web Service服务页面实现。
微信小程序模块用于向用户提供各服务器的实时运行状态信息、服务器运行数据的汇总统计结果以及故障紧急预警提示信息,其运行原理是在微信小程序平台和管理服务器之间建立数据通信,从系统数据库中实时检索数据并显示在小程序界面中。微信小程序模块使用微信开发者工具开发,使用小程序开发框架中提供的request远程请求功能与管理服务器上的用户接口进行数据通信。
管理平台模块负责向系统管理员提供用户账号管理、历史数据的检索与管理、数据汇总分析以及报表打印功能,以上各项功能均通过对管理服务器上的系统数据库发起添加、检索、更新的访问操作实现,其原理是将各类数据访问操作与配置参数封装为相应的SQL命令后提交至系统数据库中执行并获取结果。管理平台模块基于Web应用模式实现,使用PHP构建与管理服务器进行数据交互的机制,用户UI界面则基于HTML与Jquery资源库构建。
服务器运行状态数据主要分为计算机硬件资源使用情况以及网络带宽占用情况两类,相关数据基于Python的Psutil库获取,实现过程如下所示:
import psutil//引入Psutil库
psutil.cpu_percent(interval) //获取CPU运行状态
Cpura=phymem=psutil.virtual_memory() //获取内存运行状态
Memra=int(phymem.percent #内存占用比例
Memus=int(phymem.used/1024/1024) #内存使用量
Memsum=int(phymem.total/1024/1024) #内存总量
Net=psutil.net_io_counters()
SendData=Net.bytes_sent #网络发送字节数
Receive=Net.bytes_recv #网络接受字节数
在微信小程序开发框架中,数据的交互与显示采用了前后端分离的模式,其中数据的获取是在js文件中通过编程访问管理服务器的数据接口实现,而数据的显示则需要通过在wxml文件中构建UI界面实现。需要注意的是,负责实现同一功能的js与wxml类型文件的名称应该完全相同。
首先需要在js文件中调用wx.request方法向指定的管理服务器数据访问接口URL地址发送数据请求指令与参数并接收返回结果,实现过程如下所示:
var that=this
wx.request({
url:′ https://192.168.1.1/get.php′, //数据访问接口地址,必需以https开头
data:{ //向数据访问接口发送参数
serId:101, //检索编号为101的服务器运行数据
key:k100}, //用户模块的身份码
success:function(res){ //回调函数
that.setData({data01:res.data[′srName ′]}) //将返回的数据赋值给页面中的数据对象
that.setData({data02:res.data[′srCPU ′]})
that.setData({data03:res.data[′srMem ′]})}})
数据的实时刷新功能,使用微信小程序开发框架提供的setInterval定时器机制按固定的间隔时间向管理服务器不间断的发送请求并获取数据实现。
在完成数据获取的操作后,需要在wxml文件中将各数据项加载至页面显示组件中,实现过程如下所示:
//将JS文件中的数据对象内容显示在界面中
对于数据的批量显示功能,则通过页面显示组件提供的wx:for循环显示机制对从管理服务器数据接口中返回的数据集进行循环遍历操作来实现。
数据访问接口以Web Service服务的方式构建,使用PHP语言完成访问请求数据的接收、对系统数据库的操作与数据结果的返回。实现过程如下所示:
If($_GET["key"]!="k100") //用户身份码校验
{echo"Error";} //验证不通过则直接返回错误信息
$sId=$_GET["serid"]; //接收服务器ID
$cmd="select*from sertable where id=".$sId; //构建SQL命令
$redata=sqlsrv_query($server,$cmd); //执行SQL命令并获取结果集,$server为数据库连接句柄
$row=sqlsrv_fetch_array($redata,SQLSRV_FETCH_ASSOC) //从结果集中获取数据行
$srinfo=array(′title ′=> $row[′srName ′],′srCPU ′=>$row[′srCPU ′],′srMem ′=>$row[′srMem ′]); //将数据打包为数组格式
echo json_encode($srinfo); //将数据以json格式封装并返回至发送请求的模块
本文针对Windows服务器集群的远程实时管理需求,以微信小程序框架为核心设计了服务器运行实时监控平台方案,涵盖了服务器运行数据的实时采集、存储管理、访问接口以及数据在微信小程序中的获取与展示功能的运行原理与实现机制。使服务器管理人员能够通过手机微信APP方便快捷的同时监控多台服务器的实时运行状态,提升了服务器管理工作的效率与故障响应速度。