本发明涉及计算机软件微服务架构服务管理技术,尤其涉及一种服务监控及管理的方法。
背景技术:
在当前软件框架技术中,微服务框架已经日渐流行。所谓微服务框架,是将把一个大型的单个应用程序和服务,根据功能、业务或者特定的需求进行拆分,拆分为数个甚至数十个的支持微服务。围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。
但是现有的微服务架构中,没有提供服务管理相关的接口、功能或服务,需要开发者自己根据需求实现。因此,开发一套管理后台微服务的功能势在必行。
技术实现要素:
为了解决以上技术问题,本发明提出了一种服务监控及管理的方法,能够实时监测微服务架构下,各个服务的运行情况,并根据需要,控制服务的启动和停止。该功能需要与微服务功能相对独立,针对微服务起到监控作用。因此该功能需要脱离微服务框架实现。
本发明的技术方案是:
一种服务监控及管理的方法,在微服务架构下,通过自动扫描获取各服务的运行状态返回信息,通过脚本对各微服务进行启动或停止操作;并针对所有可见微服务进行权限分类,区分服务管理权限:
A、通过功能配置,将服务信息提前预置;
B、通过访问微服务注册中心接口获取已注册服务信息;
C、通过注册信息匹配,显示服务活跃状态;
D、通过shell脚本远程控制微服务单个服务启停;
E、通过用户角色控制服务管理权限。
在A中,可增删改查维护服务信息,批量维护数据。
在B中,服务一键获取所有微服务信息,同步至数据库中;
程序调用微服务注册中心REST接口,获取服务器信息。
在C中,解析注册中心反馈信息,匹配服务活跃度,并反馈给用户;通过定时任务,实时更新服务状态。
在D中,针对不同服务,配置shell脚本;调用shell脚本,控制服务启动或者停止。
在E中,关联用户角色表,控制不同角色管理不同服务。
本发明通过自动扫描获取各服务的运行状态返回信息,便于服务管理人员及时对异常服务进行维护,同时还可以通过脚本对各微服务进行启动或停止操作。针对所有可见微服务进行了权限分类,不同权限操作人员管理不同类别的服务。
附图说明
图1是服务状态及信息获取逻辑图;
图2是本发明的功能实现图。
具体实施方式
下面对本发明的内容进行更加详细的阐述:
1、界面原型
该界面中默认展示当前用户可查看的所有服务信息。其中包括:服务名称、服务描述、服务IP、服务端口及服务状态。输入服务名称或服务IP点击查询(支持模糊,分页),同时可以选定服务状态进行条件查询(支持分页)。
点击“停止服务”按钮,弹出提示框。点击确定,执行停止服务操作,同时服务状态变为“停止中”。当自动扫描发现服务已经停止后,将状态改为“停止”。按钮变为“启动服务”。
点击启动服务按钮,弹出提示框。点击确定,执行启动服务操作,同时服务状态变为启动中。当自动扫描发现服务已经停止后,将状态改为“启动”。按钮变为“停止服务”。
点击新增按钮弹出内容,服务名、服务IP、服务端口都是必填项,服务类型是必选项。输入无误后点击确定即可。该功能是将服务信息提前预置。
2、实现原理
2.1数据结构
服务管理表,用于存储服务信息,比对服务状态,结构如下:
服务角色对应表:
角色信息表:
2.2逻辑概述
服务状态及信息获取逻辑:服务管理应用访问网关,网关请求注册中心后获取已注册服务列表,返回给WEB应用,如图1所示。
在服务列表中选择需要“启动”或者“关停”的服务,执行“启动”或“关停”动作后,远程调用shell脚本,将对应的服务启动或停止。发起命令后,再下一次自动扫描轮询之前,服务状态会保持在“启动中”或“停止中”,执行动作后,重新查询注册中心,并返回注册服务信息,如图所示。
2.3关键逻辑处理
2.3.1服务查询
2.3.1.1服务查询页面及后台类路径
服务管理应用:
JSP:
/jsp/serviceStatement/serviceStatement.jsp
controller:
src/java/com/genersoft/serviceStatement/controller/ServiceStatementCont roller.java
service:
接口:
src/java/com/genersoft/serviceStatement/service/IServiceStatementServic
e.java
实现类:
src/java/com/genersoft/serviceStatement/service/impl/erviceStatementSer
viceImpl.java
mapper:
src/java/com/genersoft/serviceStatement/mapper/ServiceStatementMapper.x
ml
src/java/com/genersoft/serviceStatement/mapper/ServiceStatementMapper.java微服务框架:
integrain-sm-gateway:
/src/main/java/org/integrain/sm/gateway/serviceStatement/
controller/ServiceStatementController.java
2.3.1.2查询逻辑实现
2.3.1.2.1查询配置服务
JSP页面初始化或触发查询动作后,调用ServiceStatementController类中的queryStatement方法,该方法@RequestMapping为“/queryStatement”。
queryStatement调用IServiceStatementService中的queryStatement方法。
IServiceStatementService中的queryStatement方法通过调用ServiceStatementMapper中的queryStatement方法查询PUB_SERVICE_STATEMENT表,区分默认查询或带参数查询,默认查询不传递参数。
返回的查询结果暂存至ServiceStatementServiceImpl类中实例化的serviceBean中。
2.3.1.2.2查询注册中心已注册服务
在执行完(1)后ServiceStatementController通过HttpClient调用integrain-sm-gateway工程中ServiceStatementController类的findEurekaApps方法,该方法通过feign远程调用注册中心的Rest接口“/eureka/apps”。获取所有在注册中心上注册的服务信息。接口返回JSON格式数据。
以serviceBean数据为基础,结合注册中心的已注册服务信息,可得知PUB_SERVICE_STATEMENT表中配置服务的启动状态。数据处理完毕后,返回给前台界面展示。页面中的“操作”按钮,根据服务状态动态改变。
特殊情况控制:调用网关失败,无法获取注册中心的服务注册信息。因此调用网关失败时,需要特殊标记网关调用失败导致其他服务状态不可知。
2.3.1.2.3定时轮询服务状态
除了主动发出查询请求外,功能中自带定时轮询动作,实时调取注册中心“/eureka/apps”接口获取服务状态信息,核心代码如下:
self.setInterval(“queryServer(…)”,5000)
2.3.2服务启停
服务启停功能,依靠shell脚本实现。为所有在PUB_SERVICE_STATEMENT表中配置的服务创建shell脚本,将脚本放置在Linux服务器中的“bin/sh”下。Shell脚本参考配置如下停止服务:
#!/bin/bash
HOME='/usr/integrain'
port=8766
cd$HOME
PID=`ps-ef|grep integrain-sm-gateway-1.0.0-0702.jar|grep-v grep|awk'{print$2}'`
echo"K is:"$PID
echo"dfhadfiadfis="$PID
kill$PID
说明:
其中,HOME代表项目jar包的路径,cd$HOME代表查看当前文件夹下的文件。PID=`ps-ef|grep integrain-sm-gateway-1.0.0-0702.jar|grep-v grep|awk'{print$2}'`代表根据jar包名称,获取当前服务的进程ID。kill$PID代表杀死此进程,服务停止。
启动服务:
echo"启动服务开始**"
HOME='/usr/integrain'
JAR_HOME=integrain-sm-gateway-1.0.0-0702.jar
cd$HOME
nohup java-jar integrain-sm-gateway-1.0.0-0702.jar>out.log 2>&1&
sleep 1s
echo"系统自动启动中5..."
sleep 1s
echo"系统自动启动中4..."
sleep 1s
echo"系统自动启动中3..."
sleep 1s
echo"系统自动启动中2..."
sleep 1s
echo"系统自动启动中1..."
echo“启动完成========================================》”
说明:
其中,HOME代表项目jar包的路径,cd$HOME代表查看当前文件夹下的文件。nohup java-jar integrain-sm-gateway-1.0.0-0702.jar>out.log 2>&1&代表启动名称为integrain-sm-gateway-1.0.0-0702.jar的jar包,并经日志输出到out.log中。
2.3.2.1脚本路径配置
点击新增或编辑按钮,弹出弹框,对shell脚本路径进行配置,每一个服务对应一个启动脚本路径和一个停止脚本路径,用于服务的启动和停止。
脚本路径命名规则如下:/usr/bin/shell/xxxx.sh。其中,/usr/bin/shell/代表Linux服务器上的放置shell脚本的路径,xxxx.sh代表shell脚本的名称。
2.3.2.2脚本调用流程
首先配置Linux服务器的IP地址、用户名和密码。
其次,点击启动服务按钮或停止服务按钮,根据所填写的IP地址、用户名和密码登录Linux服务器。若登录成功,系统会根据你所配置的脚本路径,对Linux服务器上的shell脚本进行调用,执行shell脚本里的内容。
最后,根据shell脚本是否执行成功,服务启停页面会显示已启动、已停止或者启动失败、停止失败等状态。
在ServiceStatementController中定义方法“ShellExecutor”作为shell脚本的执行方法。
根据页面上列表中的服务信息,在执行脚本时,将这些信息传递给ShellExecutor方法,动态执行不同服务的脚本。
执行脚本前,记录服务状态。执行脚本后,重新获取注册中心中的已注册服务信息,如果服务停止后,在注册中心仍旧能够看到信息,则等待下一次轮询再次执行查询动作,期间页面处于等待效果,如果仍未变化,则提示“停止服务失败”,如果已经停止,则提示“停止服务成功”,此时结束等待效果。如果启动服务后,查看注册信息,未发现服务被启动,则提示“服务启动失败”。