微服务链路追踪 Skywalking 服务警告



1 摘要

Skywalking 支持服务警告,即当服务调用异常的时候通知开发者。

准备工作

Spring Cloud Alibaba 2.X 简易集成 Skywalking 实现微服务链路追踪

2 警告通知配置

配置文件路径

${skywalkingPath}/config/alarm-settings.yml

其中自带了一些服务警告的配置,包括服务响应时间、数据库响应时间等

webhooks:
#  - http://127.0.0.1/notify/
#  - http://127.0.0.1/go-wechat/
  - http://127.0.0.1:8612/api/shop/user/notify 

通知接口配置

当触发警告规则时,会向指定的接口发送请求,然后可以根据业务需要在接口中添加邮件、短信以及其他 IM 工具的通知。

3 通知接口示例

通知接口

./cloud-alibaba-gateway-filter/src/main/java/com/ljq/demo/springboot/alibaba/gateway/filter/controller/DemoController.java
package com.ljq.demo.springboot.alibaba.gateway.filter.controller;

import cn.hutool.json.JSONUtil;
import com.ljq.demo.springboot.alibaba.gateway.filter.common.api.ApiResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

/**
 * @Description: 测试接口控制层
 * @Author: junqiang.lu
 * @Date: 2021/10/22
 */
@Slf4j
@RestController
@RequestMapping(value = "/api/shop/user")
public class DemoController {


    /**
     * 通知
     *
     * @param obj
     * @return
     */
    @PostMapping(value = "/notify")
    public ResponseEntity<?> notify(@RequestBody Object obj) {
        log.warn("/api/user/notify, request param: {}", JSONUtil.toJsonStr(obj));
        return ResponseEntity.ok("Skywalking warning notify");
    }


}

4 测试通知

根据警告规则,其中有一条是在 3-10 分钟内平均服务响应时间超过 1000ms 即触发警告通知

为了方便测试,在服务提供者的接口中添加一定的延时

./cloud-alibaba-server-provider/src/main/java/com/ljq/demo/pringboot/alibaba/server/provider/controller/NacosProviderController.java
package com.ljq.demo.pringboot.alibaba.server.provider.controller;

import com.ljq.demo.pringboot.alibaba.server.provider.model.param.HelloParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

/**
 * @Description: nacos 服务提供者控制层
 * @Author: junqiang.lu
 * @Date: 2020/12/1
 */
@Slf4j
@RestController
@RequestMapping("/api/nacos")
public class NacosProviderController {

    @Value("${server.port}")
    private Integer port;

    /**
     * hello 方法
     *
     * @param helloParam
     * @return
     */
    @GetMapping(value = "/hello", produces = {MediaType.APPLICATION_JSON_VALUE})
    public ResponseEntity<String> sayHello(HelloParam helloParam) {
        String result = "Hello," + helloParam.getName();
        log.info("serverPort: {}", port);
        log.info("result: {}", result);
        try {
            Thread.sleep(3000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return ResponseEntity.ok(result);
    }



}

连续通过微服务请求接口,查看查看 Skywalking 控制台

skywalking-warning-1

警告详情

skywalking-warning-2

后台警告请求参数

[
    {
        "scopeId": 2,
        "alarmMessage": "Response time of service instance 84b6d385e3334a96a5c91a025a320d33@172.16.21.66 of cloud-alibaba-gateway-filter is more than 1000ms in 2 minutes of last 10 minutes",
        "tags": [],
        "id0": "Y2xvdWQtYWxpYmFiYS1nYXRld2F5LWZpbHRlcg==.1_ODRiNmQzODVlMzMzNGE5NmE1YzkxYTAyNWEzMjBkMzNAMTcyLjE2LjIxLjY2",
        "scope": "SERVICE_INSTANCE",
        "id1": "",
        "name": "84b6d385e3334a96a5c91a025a320d33@172.16.21.66 of cloud-alibaba-gateway-filter",
        "ruleName": "service_instance_resp_time_rule",
        "startTime": 1637656398030
    },
    {
        "scopeId": 2,
        "alarmMessage": "Response time of service instance edd027103e5a4badb88fa249eb76d58e@172.16.21.66 of cloud-alibaba-server-consumer-feign is more than 1000ms in 2 minutes of last 10 minutes",
        "tags": [],
        "id0": "Y2xvdWQtYWxpYmFiYS1zZXJ2ZXItY29uc3VtZXItZmVpZ24=.1_ZWRkMDI3MTAzZTVhNGJhZGI4OGZhMjQ5ZWI3NmQ1OGVAMTcyLjE2LjIxLjY2",
        "scope": "SERVICE_INSTANCE",
        "id1": "",
        "name": "edd027103e5a4badb88fa249eb76d58e@172.16.21.66 of cloud-alibaba-server-consumer-feign",
        "ruleName": "service_instance_resp_time_rule",
        "startTime": 1637656398030
    },
    {
        "scopeId": 2,
        "alarmMessage": "Response time of service instance 2b49cfa986ad4e45ba2084388a28055f@172.16.21.66 of cloud-alibaba-server-provider is more than 1000ms in 2 minutes of last 10 minutes",
        "tags": [],
        "id0": "Y2xvdWQtYWxpYmFiYS1zZXJ2ZXItcHJvdmlkZXI=.1_MmI0OWNmYTk4NmFkNGU0NWJhMjA4NDM4OGEyODA1NWZAMTcyLjE2LjIxLjY2",
        "scope": "SERVICE_INSTANCE",
        "id1": "",
        "name": "2b49cfa986ad4e45ba2084388a28055f@172.16.21.66 of cloud-alibaba-server-provider",
        "ruleName": "service_instance_resp_time_rule",
        "startTime": 1637656398030
    },
    {
        "scopeId": 6,
        "alarmMessage": "Response time of endpoint relation User in User to /cloud-alibaba-consumer-feign/api/nacos/consumer/hello in cloud-alibaba-gateway-filter is more than 1000ms in 2 minutes of last 10 minutes",
        "tags": [],
        "id0": "VXNlcg==.0_VXNlcg==",
        "scope": "ENDPOINT_RELATION",
        "id1": "Y2xvdWQtYWxpYmFiYS1nYXRld2F5LWZpbHRlcg==.1_L2Nsb3VkLWFsaWJhYmEtY29uc3VtZXItZmVpZ24vYXBpL25hY29zL2NvbnN1bWVyL2hlbGxv",
        "name": "User in User to /cloud-alibaba-consumer-feign/api/nacos/consumer/hello in cloud-alibaba-gateway-filter",
        "ruleName": "endpoint_relation_resp_time_rule",
        "startTime": 1637656398030
    },
    {
        "scopeId": 6,
        "alarmMessage": "Response time of endpoint relation SpringCloudGateway/RoutingFilter in cloud-alibaba-gateway-filter to {GET}/api/nacos/consumer/hello in cloud-alibaba-server-consumer-feign is more than 1000ms in 2 minutes of last 10 minutes",
        "tags": [],
        "id0": "Y2xvdWQtYWxpYmFiYS1nYXRld2F5LWZpbHRlcg==.1_U3ByaW5nQ2xvdWRHYXRld2F5L1JvdXRpbmdGaWx0ZXI=",
        "scope": "ENDPOINT_RELATION",
        "id1": "Y2xvdWQtYWxpYmFiYS1zZXJ2ZXItY29uc3VtZXItZmVpZ24=.1_e0dFVH0vYXBpL25hY29zL2NvbnN1bWVyL2hlbGxv",
        "name": "SpringCloudGateway/RoutingFilter in cloud-alibaba-gateway-filter to {GET}/api/nacos/consumer/hello in cloud-alibaba-server-consumer-feign",
        "ruleName": "endpoint_relation_resp_time_rule",
        "startTime": 1637656398030
    }
]

可以提取其中的字段,加工之后通知给开发者

5 推荐参考资料

微服务链路追踪组件 Skywalking 实战

6 Github 源码

Gtihub 源码地址 : https://github.com/Flying9001/springBootDemo

个人公众号:404Code,分享半个互联网人的技术与思考,感兴趣的可以关注.
404Code

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值