学习本篇文章之前首先要了解一下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】