skywalking忽略调用链路中的指定异常

这篇具有很好参考价值的文章主要介绍了skywalking忽略调用链路中的指定异常。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 往期内容

    一、skywalking安装教程

    二、skywalking全链路追踪

    三、skywalking日志收集

一、介绍

在前面介绍在微服务项目中使用skywalking进行全链路追踪时,我们发现当一次请求链路中某个服务出现异常时,在skywalking中会将该链路用红色标记为ERROR,在异常链路详情中也可以看出是哪个服务出现了异常并可以查看响应的异常信息。如下图所示。

skywalking忽略调用链路中的指定异常,skywalking,微服务,JAVA,skywalking,微服务,java

那么有没有办法忽略某个指定的异常呢?就是说如果一个请求链路中某个服务抛出了该异常,skywalking仍然认为该异常属于正常现象,并不会认为它是ERROR

答案是肯定的。我们往下看。

二、演示项目介绍

项目结构依然参考skywalking安装教程中的演示项目,业务流程就是商品服务暴露接口给客户端,当客户端调用商品服务接口时,商品服务调用订单服务,订单服务调用支付服务,形成一个包含三个服务的调用链。如下图所示。

skywalking忽略调用链路中的指定异常,skywalking,微服务,JAVA,skywalking,微服务,java

1. 支付服务

现在我们定义两个异常:SixExceptionSevenException,其中SixException 继承 SevenExceptionSevenException继承RuntimeException,也就是说我们自定义的两个异常都是运行时异常。结构如下。

skywalking忽略调用链路中的指定异常,skywalking,微服务,JAVA,skywalking,微服务,java

当接口接收的参数goodsId为6的倍数时,抛出SixException;当参数goodsId为7的倍数时则抛出SevenException。如下所示

  • SevenException

    @Slf4j
    public class SixException extends SevenException{
    
        public SixException(String message) {
            super(message);
        }
    }
    
  • SixException

    @Slf4j
    public class SevenException extends RuntimeException{
    
        public SevenException(String message) {
            super(message);
        }
    }
    
  • 修改接口

    @GetMapping("/pay")
    public Integer pay(@RequestParam("goodsId") Integer goodsId) {
        log.info("支付服务feign接口,服务端口号:{}", port);
        log.info("商品id:{}", goodsId);
        if (goodsId % 6 == 0) {
            log.error("商品id不允许为6的倍数");
            throw new SixException("商品id不允许为6的倍数");
        }
        if (goodsId % 7 == 0) {
            log.error("商品id不允许为7的倍数");
            throw new SevenException("商品id不允许为7的倍数");
        }
    
        return 0;
    }
    
  • 添加全局异常处理器

    我们将抛出SevenException这个异常的情况定义为正常情况,当接口抛出SevenException时,通过全局异常处理器捕获该异常,然后将接口响应设置为失败即可。

    @RestControllerAdvice
    public class GlobalExceptionHandlers {
    
        @ExceptionHandler(SixException.class)
        public Integer sixException(SixException e) {
            return 1;
        }
        
        @ExceptionHandler(SevenException.class)
        public Integer sevenException(SevenException e) {
            return 1;
        }
    }
    

2. 订单服务

在原本的订单服务的接口中,有个判断条件为如果商品id为2的倍数,则返回。该条件影响我们支付服务中对SixException的测试,所以该判断条件删除,如下所示

skywalking忽略调用链路中的指定异常,skywalking,微服务,JAVA,skywalking,微服务,java

三、项目演示

下面我们按部就班启动微服务项目和skywalking服务,并调用商品服务接口,分别传入商品id为6和7的参数。

  • 商品id为6

    请求如图

    skywalking忽略调用链路中的指定异常,skywalking,微服务,JAVA,skywalking,微服务,java

    日志如图

    skywalking忽略调用链路中的指定异常,skywalking,微服务,JAVA,skywalking,微服务,java

  • 商品id为7

    请求如图

    skywalking忽略调用链路中的指定异常,skywalking,微服务,JAVA,skywalking,微服务,java

    日志如图

    skywalking忽略调用链路中的指定异常,skywalking,微服务,JAVA,skywalking,微服务,java

1. 未忽略异常

在未忽略异常的情况下,skywalking将出现异常的链路以及出现异常的服务均使用红色标记为ERROR

请求参数商品id分别为6和7的调用链路如下

  • 商品id为6的请求链路

    skywalking忽略调用链路中的指定异常,skywalking,微服务,JAVA,skywalking,微服务,java

  • 商品id为7的请求链路

    skywalking忽略调用链路中的指定异常,skywalking,微服务,JAVA,skywalking,微服务,java

2. 忽略异常

有时候抛出异常是控制代码运行的重要方式,因此我们需要对这类异常进行忽略。skywalking提供了两种方式:修改配置使用注解

修改配置

agent.config配置文件中找到statuscheck.ignored_exceptions对其进行配置,当然了配置方式有多种:修改配置文件jvm启动参数javaagent选项操作系统环境变量,这四种配置方式我们在skywalking安装教程中已经详细介绍过了。这里以修改jvm启动参数为例,当需要忽略多个异常时,使用逗号“,”分隔。如下所示。

skywalking忽略调用链路中的指定异常,skywalking,微服务,JAVA,skywalking,微服务,java

修改完成后重新启动支付服务,然后再分别调用商品id为6和商品id为7两个请求,得到的调用链路如下

  • 商品id为6的请求链路

    skywalking忽略调用链路中的指定异常,skywalking,微服务,JAVA,skywalking,微服务,java

  • 商品id为7的请求链路

    skywalking忽略调用链路中的指定异常,skywalking,微服务,JAVA,skywalking,微服务,java

从截图可以发现,当我们在某个服务中忽略指定的异常时,skywalking会将出现该异常的服务标记为成功。而且,我们忽略的异常明明是SevenException,但是当出现SixException时,skywalking也会对其进行忽略。

所以得出结论:当忽略一个指定的父异常时,skywalking会忽略该父异常和它的子异常。

使用注解

skywalking也提供了通过注解的方式来指定一个忽略的异常。

  • 添加依赖

    <dependency>
        <groupId>org.apache.skywalking</groupId>
        <artifactId>apm-toolkit-trace</artifactId>
        <version>8.9.0</version>
    </dependency>
    
  • 在要忽略的异常上添加注解@IgnoredException,等同于添加配置statuscheck.ignored_exceptions

    @IgnoredException
    public class SevenException extends RuntimeException{
    
        public SevenException(String message) {
            super(message);
        }
    }
    

四、结论

  • 通过给微服务添加statuscheck.ignored_exceptions=异常类的限定路径,实现在调用链路中忽略指定异常。
  • 通过注解@IgnoredException指定要忽略的异常,但需要添加依赖apm-toolkit-trace
  • 当忽略一个指定的父异常时,skywalking会忽略该父异常和它的子异常。


纸上得来终觉浅,绝知此事要躬行。

————————我是万万岁,我们下期再见————————文章来源地址https://www.toymoban.com/news/detail-640506.html

到了这里,关于skywalking忽略调用链路中的指定异常的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SkyWalking链路追踪-搭建-spring-boot-cloud-单机环境 之《10 分钟快速搭建 SkyWalking 服务》

    首先了解一下单机环境 第一步,搭建一个 Elasticsearch 服务。 第二步,下载 SkyWalking 软件包。 第三步,搭建一个 SkyWalking OAP 服务。 第四步,启动一个 Spring Boot 应用,并配置 SkyWalking Agent。 第五步,搭建一个 SkyWalking UI 服务。 准备工作,准备一个docker网络组,网络组的名字为

    2024年02月15日
    浏览(59)
  • 【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控

    skywalking 是一个apm系统,包含监控,追踪,并拥有故障诊断能力的 分布式 系统   Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品,它同时吸收了Zipkin /Pinpoint /CAT 的设计思路。特点是:支持多种插件,UI功能较强,支持非侵入式埋点。目前使用厂商最多,版

    2024年02月08日
    浏览(59)
  • 全网最全的微服务链路追踪实践-SkyWalking(看这一篇就够了)

    链路追踪介绍 对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如: 1. 如何串联整个调用链路,快速定位问题? 2. 如何缕清各个微服务之间的依赖关系? 3. 如何进行各个微服务接口的性能分折? 4. 如何跟踪整个业务流程的调用处

    2024年02月03日
    浏览(53)
  • 专为云原生、微服务架构而设计的链路追踪工具 【SkyWalking介绍及搭建】

    服务链路追踪已成为不可或缺的一环 skywalking是一个优秀的 国产 开源框架,2015年由个人 吴晟 (华为开发者)开源 , 2017年加入apache 孵化器。 skywalking是分布式系统的应用 程序性能监视工具 ,专为微服务、云原生架构和基于容器化技术 (docker、K8s、Mesos)架构而设计,它是

    2023年04月08日
    浏览(86)
  • 案例实践丨基于SkyWalking全链路监控的微服务系统性能调优实践篇

    1背景 随着开源社区和云计算的快速推进,云原生微服务作为新型应用系统的核心架构,得到了越来越广泛的应用。根据Gartner对微服务的定义:“微服务是范围狭窄、封装紧密、松散耦合、可独立部署且可独立伸缩的应用程序组件。” 微服务之父,马丁.福勒,对微服务概述

    2024年02月09日
    浏览(39)
  • 【SkyWalking】分布式服务追踪与调用链系统

    SkyWalking是一个开源的观测平台,官网:Apache SkyWalking; 可监控: 分布式追踪调用链 、jvm内存变化、监控报警、查看服务器基本配置信息。 在整个skywalking的系统中,有三个角色: 1.skywalking agent 和业务系统(jar)关联在一起 ,负责收集各种监控数据; 2.skywalking oapservice负责处

    2024年02月11日
    浏览(44)
  • 分布式系统中的分布式链路追踪与分布式调用链路

    本文分享自天翼云开发者社区《分布式系统中的分布式链路追踪与分布式调用链路》,作者:c****w 在分布式系统中,由于服务间的调用关系复杂,需要实现分布式链路追踪来跟踪请求在各个服务中的调用路径和时间消耗。这对问题排查和性能监控都很重要。 常用的分布式链

    2024年01月19日
    浏览(59)
  • skywalking springgateway 全链路

    spring-cloud-gateway 3.1.0 skywalking 默认是不整合springGateway的,需要手动拷贝skywalking optional-plugins 下的 apm-spring-cloud-gateway-N.x-plugin-8.13.0.jar 和 apm-spring-webflux-5.x-plugin-8.13.0.jar 架包拷贝到 plugins 目录下 gateway架包的选择根据springgateway的版本进行选择 经过上一步配置的请求会存在调用链

    2024年02月10日
    浏览(46)
  • skywalking全链路监控部署

    环境配置要求 Centos 7 jdk1.8.0.144 elasticsearch 7.8.1 skyWalking 3.2.6 一、安装jdk1.8 创建相关目录,解压安装包,解压并移动到jdk目录下 设置环境变量,查看jdk版本 二、安装elasticsearch 2.1、创建用户elasticsearch useradd es passwd es 2.2、下载elasticsearch7.8.1,并解压到相关目录 2.3、修改系统参

    2024年02月08日
    浏览(39)
  • Skywalking链路追踪

    APM(Application Performance Monitoring)系统是一种用于监控和管理应用程序性能的工具。它可以帮助开发人员和运维团队实时监控应用程序的性能指标、识别潜在的性能问题,并提供性能优化建议。 APM系统可以帮助用户及时发现和解决应用程序的性能问题,提升用户体验和系统稳

    2024年01月18日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包