• 0
  • 0
分享
  • 应用系统常用监控技术浅析——软件测试圈
  • 曼倩诙谐 2023-04-10 16:12:35 字数 3407 阅读 2099 收藏 0

  一、概述

  随着现代信息系统越来越庞大,机器数量呈现指数级增长,信息系统运维对平台化服务能力要求越来越高,建立有效的监控体系准确及时发现系统运行中出现的问题,对于保障应用系统稳定运行具有重要意义。为提升生产问题感知及响应能力,通常会配置各种类型的监控,本文从单类型监控、业务交易之间聚合监控、业务交易与基础资源聚合监控等方面介绍监控常用技术方法,供读者进行参考学习。

  二、单类型监控

  单类型监控是指使用单一类型技术进行应用系统监控,常用的监控方法包括Ajax请求报文响应报文监控、业务日志监控、页面内容监控、业务数据监控、基础资源监控。

1-1.png

  方面对几种监控类型详细介绍:

  1、Ajax监控:通过第三方监控平台定时发送业务交易请求,并对响应报文进行断言的方法验证交易的正确性。

  方法1:http 状态码监控。对http请求的状态码进行判断,是否符合预期结果,各类http状态码含义如下,我们仅需要配置状态码断言即可判断交易是否正常。

1-2.png

  示例:

  Request URL: https://msg.csdn.net/v1/web/message/view/unread

  Request Method: POST

  Status Code: 200

  方法2:http响应报文监控。http状态码监控可以监控交易报文是否正常响应,但是无法判断交易逻辑是否正常,对http报文响应报文具体内容进行监控,可以弥补该问题。通过判断http响应报文中具体字段的值对交易进行监控。

  示例:ajax响应报文中包含如下信息,则可以对message字段的值进行监控。

{
message: "success"
status: true
}

  适用场景:适用于对http协议响应报文、响应码进行监控。

  2、日志监控:日志监控是对应用系统运行过程中产生的日志进行监控。以log4j为例,日志级别包括ALL、TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF,其中ALL 是打印所有日志,OFF是所有日志都不打印,为了排查系统运行问题,通常开发人员根据需要会打点一定的日志,但是如果loglevel 配置的太低,则会打印过多的日志信息,从而影响系统性能。

  日志监控通常可以基于ERROR、FATAL 类日志打印进行监控。开发人员在业务逻辑中进行相应的判断,并打印错误日志,例如:Log.error(“123456”);  监控平台可以抓取系统中打印的错误日志,并基于正则表达式判断是否符合异常告警条件。符合告警规则,则进行邮件、短信等告警。

  日志告警可以精准获取异常告警的代码位置,从而便于进行问题分析。

1-3.png

  适用场景:适用于系统开发人员在代码的关键逻辑中打点了日志信息时使用。

  3、网页监控:对于DOC类型的请求,可以通过发送请求报文,对响应页面html内容设置监控,判断响应页面内容是否包含指定的内容,网页内容监控是指监控网页标题、网页关键词、网页描述、出站链接等内容信息进行监控。

  使用方式:通过提取网页内容做为监控的对象,对比与上一次监测记录的变化情况,例如:<meta name ="keywords" content="网页关键词(被监控对象)" />。

  页面监控配置流程:

1-4.png

  适用场景:具有前端页面的系统可以采用该方法进行页面内容监控。

  4、数据监控:通过定时执行数据库sql脚本或者数据分析,验证具有关联性的表是否出现不受控制的异常数据记录,数据内容监控可以发现业务逻辑异常造成的数据问题,并及时提供给运营人员进行后续处理,以应对数据不一致对用户产生的影响。

  数据监控分类如下:

1-5.png

  数据监控配置流程:

1-6.png

  适用场景:对于熟悉数据表逻辑关系及不同表中字段之间逻辑关系时可以使用该方法。

  5、资源监控:对于CPU、内存、硬盘等基础资源的监控,并设置阈值,对于分机房类应用系统,可以按照机房分别配置资源监控,可以及时发现底层资源故障,提示系统运维人员及时进行资源扩容或者问题排查,具体重要的意义。

  通常当CPU、内存利用率超过80%时,系统性能将逐步出现瓶颈,从而会严重影响用户使用体现,因此可以设置CPU、内存等使用率超过80%时进行告警;对于数据库服务,可以对数据库的连接数、表空间、系统日志等信息进行监控;对于磁盘、网络设置可以监控IO速率的参数以发现相关问题。

  但基础资源监控无法具体判断具体是哪些业务造成的资源问题,以及对哪些业务造成的影响比较大,结合其他监控方法可以达到更好的效果。

  几种监控方法对比:

1-7.png

  适用场景:对于依赖的底层资源的服务可以采用这种监控方法。

  三、聚合类型监控

  1、交易调用链路聚合监控

  对于系统之间调用较为复杂的业务场景,仅仅通过单系统的监控难以具体定位到故障节点。交易接口之间聚合监控是指对已经建立的具有调用关系的接口监控项建立绑定关系,从而根据调用链路上各个节点的执行结果判断业务系统群的可用性情况及故障节点。

  如下图所示,A系统的一个业务交易trans1, 调用B系统的交易和C系统的交易,B系统又会调用D系统交易。在这种场景下,仅仅对A系统业务交易进行监控,发生告警后,无法准备判断A、B、C、D 4个系统中哪个系统发生了故障,造成业务交易无法执行成功,需要开发人员根据交易链条逐个判断分析,大大增加了系统问题分析的难度。

1-8.png

  使用交易调用链路聚合监控方法,拿A系统trans1交易这个场景来说,对A、B、C、D 4个系统分别配置监控案例mA、mB、mC、mD,并建立链路绑定关系(mA->mB、mB->mD、mB->mC)。这样在系统发生告警后,可以根据A、B、C、D 4个系统监控交易执行情况,迅速找到故障节点。

  A系统Trans1交易监控案例绑定关系:

1-9.png

  优势:能够快速找到故障节点,降低故障分析复杂程度。因为交易监控之间建立了绑定关系:mA->mB->mD、mB->mC,当mA、mB、mC、mD4个监控项按照一定频率执行时并获取到对应的执行结果后,可以根据根据交易之间的绑定关系判断故障节点。例如:

  某时间节点:mD执行成功,mB执行失败,mA执行失败,可以判断是由于mB交易执行失败造成mA执行失败,从而提升问题处置效率。

  缺点:配置复杂程度高,需要清楚交易调用链路,并分别配置监控案例,并建立绑定关系。

  适用场景:对于交易链路比较复杂,难以判断问题故障具体出在什么位置的情况下建议增加使用该方法监控。

  2.业务监控与资源监控聚合

  随着信息系统复杂程度和可靠性要求的不断提高,信息系统的部署架构也越来越复杂。信息系统的部署会采用多地区多机房的部署方式,从而根据用户所在区域访问不同的后台服务,以提升系统响应能力。业务监控与资源监控聚合是指将业务交易监控与资源级监控建立绑定关系,并根据各个监控项的执行结果进行聚合分析,从而判断系统故障节点的监控方法。

1-10.png

  业务交易的可用性与基础资源是紧耦合的关系,基础资源的故障或性能瓶颈会严重影响业务交易的运行。通过业务交易监控无法准备定位到具体哪些基础资源故障引起。例如业务交易访问失败,可能是因为服务器停机、机器无法正常响应请求等问题造成。具体哪个资源故障造成业务交易无法正常执行却无法判断。

  通过将业务交易监控和基础资源监控进行绑定聚合可以有效解决该问题。例如我们的业务系统已经配置了业务监控m1、 tomcat 服务器监控m2、数据库服务器监控m3 三个监控配置,通过建立监控项m1、m2、m3的绑定关系(如下图所示),当发生基础资源造成的业务交易报错后,可以迅速找到问题原因以进行问题响应。

1-11.png

  适用场景:对于业务交易依赖底层资源,底层资源故障会造成部分业务交易报错的情况下可以使用该种监控方法。

  四、总结

  本文首先介绍了几种单应用系统环境监控方法及主要技术,包括ajax请求响应报文监控,日志监控、基础资源监控、业务数据监控、页面内容监控、高级脚本监控,并分析了这几种技术的主要使用场景,之后对业务交易聚合监控、业务交易与基础资源监控方法进行了介绍,希望给测试人员、应用环境运维人员、监控平台建设者提供一定的参考,提升信息系统运维服务能力。



作者:郭朝兴    

来源:http://www.51testing.com/html/45/n-7795445.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   作为一只从事软件测试将近10年的老鸟,如今在腾讯某测试团队任职测试主管一职。回首过往,从事软件测试这十年也有些许体会,写出来供大家思考,欢迎大家留言交流。  首先,先谈谈软实力,一个优秀的测试技术专家,我认为需要具备以下几个特性:  持续学习能力:  计算机技术的发展可谓日新月异,如果不持续学习,那么不出2年,你就会发现你只能当一个廉价的手工测试人员。所以如果能在工作中学习最好,不能的话,下班后保证2个小时的自学时间。几年下来,你就能发现自己的进步有多大。  沟通能力:  日常工作的沟通能力,和开发、产品、运维、客服同事的沟通要及时,表达要准确,多微笑、多倾听、保持良好轻松的同事关系。  ...
            1 1 944
            分享
          •   新浪科技讯 北京时间1月16日晚间消息,据报道,微软正考虑对旧金山人工智能(AI)研究公司OpenAI投资100亿美元。分析人士称,这笔潜在交易有可能成为人工智能新时代的决定性交易。  如果微软对人工智能技术深远影响的押注是正确的,那么这笔交易还可能引发人工智能世界的一场重组,因为其他科技公司也竞相在“生成式人工智能”(Generative AI)的新领域争夺自己的位置。  上个月,OpenAI因为推出了一款智能聊天机器人系统ChatGPT而成为了全球关注的焦点。ChatGPT是一套人工智能系统,可以回答问题,并用听起来十分自然的语言生成文本。  ChatGPT很快就得到了微软的关注。微软...
            0 0 1083
            分享
          • 软件测试其实就是对程序进行一些操作,来发现程序所存在的缺陷,衡量软件的质量,并对其是否能满足设计要求进行评估的过程。软件测试方法分类基于直觉和经验的方法Ad-hoc测试方法:强调测试人员根据自己的经验,不受测试用例的约束,放开思想,灵活地进行测试。ALAC测试方法:Act like a customer,像客户那样做,对常用的功能进行测试;错误推测法:有经验的测试人员根据自己的工作经验和直觉测出程序可能存在的错误,从而有针对性地进行测试。基于输入域的测试方法等价类划分法边界值分析法基于组合及其优化的方法判定表法因果图法pair-wise方法正交试验法基于逻辑覆盖的方法语句覆盖判定覆盖条件覆盖判...
            0 0 1159
            分享
          • 今天我们就来浅聊一下什么是接口测试,接口测试又该如何进行呢?一、什么是接口测试?接口测试是一种常见的软件测试方法,用于测试软件系统中不同模块之间的接口。接口是指两个或多个独立软件模块之间进行数据交换的地方。在软件系统中,不同的模块之间相互依赖和交互,这些模块通过接口来实现数据的传递和共享。因此,对于一个软件系统,接口测试是至关重要的,它可以帮助发现接口错误、性能问题、安全漏洞等问题。接口测试的主要目标是检查系统的不同部分之间是否正确地传递数据和调用其他组件。二、接口测试的步骤接口测试没有说有固定的步骤,会根据每个团队的需求产生不同的步骤,但基本步骤大差不差的:1、确定接口确定哪些接口需要测试以...
            0 0 1608
            分享
          •   据报道,亚马逊CEO安迪·贾西公司已经在人工智能大战中落后。  他对亚马逊在人工智能领域落后于微软和谷歌的说法进行了反驳。尽管后两家科技巨头已经将聊天机器人融合到各自的搜索引擎中,但贾西却认为目前还处于“炒作周期”,尚未进入“实质周期”。  “我认为多数人都关注这类应用,比如ChatGPT引发了大家的关注,但生成式人工智能有三个主要的层(即应用层、模型层和基础设施层),我认为它们都很重要”,贾西称。  贾西曾经表示,亚马逊计划在整个公司范围内投资人工智能,但人工智能程序有潜力增强“几乎所有的客户体验”。但他特意指出了亚马逊云AWS,认为这是能够长期利用人工智能热潮的一项业务。  今年早些时...
            0 0 1030
            分享
      • 51testing软件测试圈微信