Skywalking的重要功能详解

时间:2024-05-09 10:00:38
学习本篇文章之前首先要了解一下Sky walking的基础知识

分布式链路追踪工具Sky walking详解

一,Sky walking监控数据库

在admin服务中,连接数据库查询user表中所有数据
引入依赖

		<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

编写userList接口

	@GetMapping("/userList")
    public List<User> userList() {
        return userService.userList();
    }

UserServiceImpl类

	@Override
    public List<User> userList() {
        return this.list();
    }

user表中模拟一百万数据【使用MySQL存储过程】

CREATE PROCEDURE bachInsert2354()
BEGIN
DECLARE n INT DEFAULT 0;
START TRANSACTION;
WHILE n < 1000000 DO
	INSERT INTO `user` VALUES(NULL,'dddd','333333');
	SET n := n + 1;
	END WHILE;
	COMMIT;
END;

CALL bachInsert2354();

访问http://localhost:8086/userList
在这里插入图片描述
查看Sky walkingUI界面
在这里插入图片描述
拓扑图
在这里插入图片描述
链路追踪
在这里插入图片描述
查看数据库监控页面
在这里插入图片描述
在这里插入图片描述
Slow Statements (ms)是慢查询SQL

二,Sky walking配置服务的启动日志

将服务的启动日志上传到Sky walking
Spring boot集成log4j2
将Spring boot默认的Logback日志框架移除

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions><!-- 去掉springboot默认配置 -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

引入log4j2日志依赖

		<dependency> <!-- 引入log4j2依赖 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

引入Sky walking日志工具包依赖

        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-log4j-2.x</artifactId>
            <version>8.9.0</version>
        </dependency>

配置log4j2.xml文件【在resource目录下】

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN" monitorInterval="30">
    <!--先定义所有的appender-->
    <appenders>
        <!-- skywalking输出器 -->
        <GRPCLogClientAppender name="SkywalkingLog">
            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </GRPCLogClientAppender>
    </appenders>
    <loggers>
        <root level="INFO">
            <appender-ref ref="SkywalkingLog"/>
        </root>
    </loggers>
</configuration>

查看UI界面
在这里插入图片描述

三,配置告警

Sky walking并没有直接配置告警功能,而是将需要告警的指标配置到配置文件中,配置webhook【网络钩子】,通过自定义通知接口,然后在实现告警通知,告警规则定义在服务端的config/alarm-settings.yml文件中 ![在这里插入图片描述](https://img-blog.****img.cn/direct/746b285f63214b31a4af579ca03953fd.png)
#配置告警规则
rule:
  #服务自带的告警规则
  ...
  #自定义告警规则
  #规则名称,必须全局唯一,并且以"_rule"结尾
  xxxxxx_rule:
    #告警的指标名称,具体值可以参考下图
    metrics-name: endpoint_sla
    #[可选] 指定告警的服务
    include-names:
      - serviceA
      - serviceB
    #[可选] 排除的服务将不触发告警  
    exclude-names:
      - serviceC
    #[可选] 匹配微服务的名称, 通过正则表达式  
    include-names-regex: instance\_\d+
    #阈值,对于不同的指标类型,可以设置不用类型的值,目前支持long, double or int  
    threshold: 9000  
    #操作符
    op: "<"
    #时间窗口长度,单位时间内,指标异常就会触发告警 (单位是分钟)
    period: 2
    #累计数量,指标符合告警条件达到累计数量后,才会触发告警
    count: 3
    #静默时间,当发生告警后,多长时间不再告警,默认和period值保持一致
    silence-period: 10
    #告警内容,触发告警时,显示的消息内容 {name} 表示告警的服务名称
    message: Successful rate of service {name} is lower than 90% in 2 minutes of last 10 minutes

配置webhook
在这里插入图片描述
告警规则使用原来的实例即可
编写notify接口

    @PostMapping("/notify")
    public void alertNotify(@RequestBody List<AlertMessage> alertMessages) {
        System.out.println("alert");
        System.out.println(alertMessages);
        for (AlertMessage alertMessage : alertMessages) {
            System.out.println(alertMessage);
        }

    }

再次访问 http://localhost:8086/userList
触发notify接口
在这里插入图片描述
配置钉钉告警机器人

dingtalkHooks:
  textTemplate: |-
    {
      "msgtype": "text",
      "text": {
        "content": "Apache SkyWalking Alarm: \n %s."
      }
    }    
  webhooks:
    - url: 回调地址如【https://oapi.dingtalk.com/robot/send?access_token=dummy_token】
      secret: 机器人密钥【dummysecret】