docker Skywalking(二)配置告警信息回调指定url、自定义链路跟踪、集成logback输出traceId日志

本文介绍了如何在容器环境中配置SkyWalking告警规则,通过编辑vialarm-settings.yml文件设置回调方法。详细展示了如何编写测试接口和回调接口,并在SkyWalking界面查看告警信息。同时,文章讲解了如何利用SkyWalking的TraceID进行链路跟踪,便于问题排查,以及如何在代码中获取和使用TraceID。此外,还展示了如何通过添加@Trace注解实现方法跟踪,并集成Logback输出包含TraceID的日志。最后,提供了相关依赖库版本和日志配置文件的修改示例。

配置告警信息

  • 进入容器,操作如图
    在这里插入图片描述

  • vi alarm-settings.yml 编辑规则,修改回调方法。在docker容器中更推荐挂载此文件。
    在这里插入图片描述

  • 规则说明

    # 警报规则
    rules:                                                                    
      # 规则的唯一名称,必须以`_rule`结尾。                   
      service_sla_rule:                                                                              
        # 指标值需要是long、double或int
        # 指标名称                                           
        metrics-name: service_sla
        # 运算符                                                         
        op: "<"
        # 临界点                                                                              
        threshold: 8000                                                                              
        # 评估指标的时间长度
        period: 10                                                                                   
        # 指标符合条件后多少次会触发警报
        count: 2                                                                                     
        # 检查多少次,报警触发后报警保持静音,默认为周期。
        silence-period: 3
        # 报警提示信息,规则说明
        message: Successful rate of service {name} is lower than 80% in 2 minutes of last 10 minutes 
    
  • 写测试接口及回调接口
    在这里插入图片描述

  • skywalking 界面中报警信息
    在这里插入图片描述

  • 代码中log信息输出
    在这里插入图片描述

自定义链路跟踪

代码中获取链路跟踪id,方便排查问题

可以将traceId写到表中,例如 订单逻辑,可以直接根据traceId查看某一个订单的链路,排查链路中是否有错误

  • jar,版本根据使用的版本决定
<!-- SkyWalking 工具类 -->
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-trace</artifactId>
    <version>8.4.0</version>
</dependency>
  • 写代码,同一个线程中,traceId是相同的
@RequestMapping(value = "testTrace")
public String testTrace() {
    // 往上下文中放入键和值
    TraceContext.putCorrelation("myKey", "myValue");
    // 根据键获取值
    Optional<String> op = TraceContext.getCorrelation("myKey");
    log.info("myValue = {} ", op.get());
    // 获取跟踪id,此id就是skywalking追踪下方法的id
    String traceId = TraceContext.traceId();
    log.info("traceId = {} ", traceId);
    // 可以直接将此值存入数据库或者日志中,方便系统出问题,跟中请求链路
    SentUtil.getInstance().sent();

    ReceiveUtil.getInstance().receive();

    return new Date().toString();
}

一个业务方法想在ui界面的跟踪链路上显示出来,只需要在业务方法上加上(本项目调用本项目方法)@Trace注解即可(不能用于静态方法);

@Slf4j
public class SentUtil {

    public static SentUtil getInstance(){
        return new SentUtil();
    }
    /**
     * @Trace 将方法引入追踪链路中,可以查看方法是否有问题
     *
     */
    @Trace(operationName = "sent_trace_name")
    public void sent (){
        // 往上下文中放入键和值
        TraceContext.putCorrelation("sentKey", "sentValue");
        // 根据键获取值
        Optional<String> op = TraceContext.getCorrelation("sentKey");
        log.info("sentValue = {} ", op.get());
        // 获取跟踪id,此id就是skywalking追踪下方法的id
        String traceId = TraceContext.traceId();
        log.info("sent_traceId = {} ", traceId);
    }
}
@Slf4j
public class ReceiveUtil {

    public static ReceiveUtil getInstance(){
        return new ReceiveUtil();
    }
    /**
     * @Trace 将方法引入追踪链路中,可以查看方法是否有问题
     *
     */
    @Trace(operationName = "receive_trace_name")
    public void receive (){
        // 往上下文中放入键和值
        TraceContext.putCorrelation("receiveKey", "receiveValue");
        // 根据键获取值
        Optional<String> op = TraceContext.getCorrelation("receiveKey");
        log.info("receiveValue = {} ", op.get());
        // 获取跟踪id,此id就是skywalking追踪下方法的id
        String traceId = TraceContext.traceId();
        log.info("receive_traceId = {} ", traceId);
    }
}
  • 调用请求,查看日志可以发现同一个请求中,链路的id是相同的
    在这里插入图片描述
  • 查看链路跟踪,自定义的方法也会跟踪
    在这里插入图片描述

集成logback输出traceId日志

  • jar

    <!-- SkyWalking-日志工具类-logback-1.x -->
    <dependency>
        <groupId>org.apache.skywalking</groupId>
        <artifactId>apm-toolkit-logback-1.x</artifactId>
        <version>8.4.0</version>
    </dependency>
    
  • 修改日志配置文件logback-spring.xml,增加或修改如下配置

    • ch.qos.logback.core.encoder.LayoutWrappingEncoder
      <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
          <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
          	<!-- 根据自己的日志输出结构增加%tid即可 -->
              <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%tid] %highlight([%-5level] %logger{50} - %msg%n)</pattern>
          </layout>
          <charset>UTF-8</charset>
      </encoder>
      

    在这里插入图片描述
    这样日志中就会输出跟踪id了
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值