后台服务异常?测试右移告警监控早知道。。

2024-02-20 04:52

本文主要是介绍后台服务异常?测试右移告警监控早知道。。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

后台服务异常是影响正常业务运行的重要原因之一。如果我们能够提前发现这些异常情况,就可以及时采取措施避免问题扩大化。测试右移告警监控方案在这个时候就能派上用场了。

通过实践,我们发现这种方案可以帮助团队更早地发现后台服务异常,并快速解决问题,从而保障业务的稳定性和可靠性。让我们一起来了解一下测试右移告警监控实践吧!

“测试右移”思想下实践步骤

前段时间,公司上线了“大屏”项目,用于对接展示一些业务平台的数据。但是在上线后使用过程中,产品或业务经常反馈前台页面没有数据。出现这种情况后,开发人员会去排查问题,解决后再通知产品或业务人员解决修复情况。

 虽然研发每次都能在较短的时间内响应并解决问题,但运行一段时间后又会反复出现,也给用户造成了极其不好的使用体验。而本文则是基于“测试右移”思想,开展的一次后台服务监控告警的实践记录总结,整个实践过程可以分为:

  1. 收到问题反馈;
  2. 沟通定位问题;
  3. 讨论并选定解决方案;
  4. 解决方案实现;
  5. 验证解决方案;
  6. 优化解决方案;
  7. 实施解决方案;

 

什么是“测试右移”

在正式开始之前,先简单介绍一下“测试右移”:

我们都知道,软件测试活动应当贯穿整个软件生命周期,包括需求讨论分析阶段、研发设计编码阶段、测试阶段、上线后的监控运行阶段。“测试右移”是在产品上线后,为了验证在真实的用户数据环境下,功能、性能以及产品体验,是否符合预期而开展的一系列监控、分析、测试活动,以达到持续监控软件线上质量的目的。一旦线上发生任何问题,则可以提前反应,主动分析,尽快处理,给用户以良好的使用体验。

一、收到问题反馈

从项目上线不久,即收到产品多次在项目群中反馈的以上问题。开发经过定位后,给出的说法是“后台链接断掉了”。在其重启后台服务后,该项目确实平稳运行了一段时间,但一段时间后,又会再次发生链接断掉、前台无数据展示的情况。此问题给用户造成了很不好的使用体验。

二、沟通定位问题

1.服务架构

经过和研发的几次沟通交流,我画了份草图,尝试理解和说明问题的产生原因。先简单介绍一下大屏项目的后台服务架构,后台服务假设为B服务。B服务监听的是本地5081端口,通过TCP与网关进行连接,网关通过websocket将B服务传来的后台数据推送给前端进行展示,用户可以通过9530端口进行页面访问。网关与前端之间的websocket连接相对较为稳定,导致出问题的是B服务与网关之间的TCP连接经常断掉,从而导致网关拿不到数据,前端无法展示数据。

三、讨论并选定解决方案

1.讨论分析解决方案

既然了解了问题所在,那么就可以针对性地设计解决方案。经过与研发的交流讨论,共总结了以下方案:

① 监控后台服务端口

通过shell脚本+定时任务,每几分钟轮询一次,判断5081端口是否处于连接状态,来确定后台服务与网关之间的TCP链接是否正常,若是断链,则向企业微信发送告警消息、通知人为处理,并自动重启后台服务。这种方法优点是:

  • 最为简单快捷,能够及时通知相关研发测试及时去关注服务连通性,而不是等待客户发现,做到了主动监控;
  • 通过重启机制,能重启后台服务、重新建立TCP链接;

缺点是:

  • 启动shell脚本,开启进程,占用系统资源;
  • 部分情况下可能并不是TCP链接断掉,也可能是连接数量达到上限导致的问题,并没有从根本层面解决问题;

 

② 业务层代码解决

在业务层的代码中增加“定期检查与网关之间的TCP连接状态”机制,若出现连接断掉的情况,及时重新连接,和上述第一种方式类似,只不过由shell脚本改成了业务代码的形式。

③ 修改底层框架

对于底层通信框架,这个我了解不多。从研发出得到的结论是,改动比较大,需要修改地方比较多,可能会造成其他连带风险。

2.选定解决方案
由于底层框架修改代价较高,可能会导致其他风险、甚至影响到其他在运行项目,且项目需要重新排期,因此,经过一番权衡,我们决定采用第一种通过shell脚本监控后台服务状态的方式来实现解决。

四、解决方案实现

1.总体方案设计

send_msg.py:python脚本,向企微发送消息,通知人为干预;
monitor.sh:shell脚本,用于监听5081端口,判断服务是否为正常连接状态,若连接异常,则重启服务,并驱动执行send_msg.py的,向企微发送消息;
定时任务:配置一个每五分钟执行一次的定时任务,用于执行monitor.sh,检测TCP连接状态;

2.编写监控脚本

1)服务监控脚本

 

5081为后台服务本地端口,其与网关之间建立连接后,正常连接下,监听状态为“ESTABLISHED”;异常连接时,监听状态为“TIME_WAIT”。因此可以通过判断监听状态来判断服务的连接情况。

具体实现如下

#!/bin/shexport PYTHON_HOME=/home/python3export PATH=${PATH}:${PYTHON_HOME}"/bin"# 判断5081端口连接状态connect_number=`netstat -antp | grep 5081 | grep ESTABLISHED | wc -l`echo $connect_numberif [ $connect_number != "0" ];thenecho "5081端口连接状态正常"elseecho "5081端口已断开!!!"# 重启后台服务/home/BCS/bin/start.sh# 执行Python脚本,发送企微消息通知/home/python3/bin/python3 /home/send_msg.pyfi

注意事项:

脚本开头一定要导出环境变量,否则系统会识别不到Python3,即使/etc/profile中已配置好了Python3的环境变量。(在配置定时任务时发现,怎么都不执行发送消息的Python脚本,困扰了好久)

2)Python发送通知脚本

服务器需提前安装Python环

class EnterpriseWechatNotification:def __init__(self, hook: list):self.hook_url_list = [f"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={i}" for i in hook]self.header = {'Content-Type': 'application/json'}def send_msg(self, result=''):"""发送企业微信消息通知"""global payloadcurrent_time = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime())content = f"""** 【大屏服务监控】**
> 当前时间: {current_time}
> 当前环境: #开发环境
> 告警事件: #大屏服务断链,请及时处理!!!
{result}"""payload = {"msgtype": "markdown","markdown": {"content": content}}for hook_url in self.hook_url_list:requests.post(url=hook_url, headers=self.header, data=json.dumps(payload))if __name__ == '__main__':# 企业微信群中创建一个机器人,即可拿到hook_url# 此处为一个hook ID的列表,传入多个,则发送到多个群EnterpriseWechatNotification(hook=["xxxxxxxxxx"]).send_msg()
3.配置服务器定时任务

1)编辑定时任务

crontab -e

配置内容如下:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root# For details see man 4 crontabs# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed# 每5分钟执行一次monitor.sh
*/5 * * * * root /home/monitor.sh &

2)重启定时任务服务

systemctl restart crond

五、测试环境验证

将项目后台服务断掉,五分钟后,企业微信收到消息通知。可见,脚本及定时任务均正常运行。

由于服务重连需要一段时间,通常在一分钟以内。过一分钟后查看,服务已自动重启:

六、优化解决方案

上述方案虽能够监控服务连接状态并重启服务、发送消息通知等情况,但也面临一些缺点:运行脚本的服务器需要安装Python3,Python3相关进程也会占用系统资源。Python脚本的本质是调用企业微信的webhook,发送指定内容,那么能否直接在shell脚本中来实现同样的功能?答案是肯定的。(下列脚本为本项目后台开发设计编写,此处仅作引用、添加了一些注释方便理解,以供参考)

#!/bin/bashdate=`date +%Y/%m/%d\ %H:%M:%S`# 重连函数
re_connet()
{echo $date   ">>>连接已经断开,正在重连中..."cd /home/jumploo/risun/BCS/binsh restartcd -watch_msg  # 调用发送消息函数
}# 发送消息函数
watch_msg()
{num=$connect_num# 循环20次,每3秒轮询一次,时长共60秒for i in {1..20};do# 此处判断逻辑与上述脚本中相同link_num_=`netstat -antp | grep 5081 | grep "ESTABLISHED" | wc -l`sleep 3sif  [ $link_num_ == 1 ];thenecho $date   ">>>重新连接成功!"break;fiif  [ $i == 20 ];thenecho $date   ">>>重新连接失败 , 发送企微消息"# 通过curl命令工具请求企业微信群机器人的webhook_url,发送消息通知到企业微信curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxx' \-H 'Content-Type: application/json' \-d '{"msgtype": "markdown","markdown": {"content": "<font color=\"warning\">大屏监控消息</font>\n> 影响范围:<font color=\"comment\">开发环境 120.48.19.238</font>\n> 状态:<font color=\"comment\">当前尝试连接失败!</font>"}}'fidone
}#echo "=============== 监控 大屏数据 bcs 连接 开始! ==================="
link_num=`netstat -antp | grep 5081 | grep "ESTABLISHED" | wc -l`
if [ $link_num = 0  ];thenre_connet  # 调用重连函数
elseecho $date  ">>>连接依旧存在!"
fi

 

再创建一个脚本,用于生成日志文件,内容如下:

#!/bin/bash
sh /home/watch.sh >> /home/log_watch.log &

配置定时任务,5分钟执行一次。测试环境,手动停止B项目的后台服务后,企业微信通知效果如下:

七、实施解决方案

我们采用的是Shell脚本中发送企微通知的方案,这样更有利于节约资源。在测试环境验证通过后,即可在生产环境进行部署,步骤同测试环境中的部署步骤一致。

小结

以上就是基于xx后台服务监控告警的一次“测试右移”的实践过程:

  • 作为项目的测试人员,除了要完成项目测试的基本工作,还应当能够及时跟进问题反馈、了解问题背后的真实原因、参与讨论解决方案,驱动问题解决,从而“变被动为主动”;
  • 确切地说,上述解决方案并不是上上之选,是在结合时间、风险、人力等项目实际情况,综合评定后所做的选择。截至目前,项目一直平稳运行,未再出现前面项目群中反馈的无数据问题。当然,没有问题反馈并不代表就可以高枕无忧。

 

 感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

这篇关于后台服务异常?测试右移告警监控早知道。。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/727105

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp