学习本篇文章之前首先要了解一下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类
@Overridepublic List<User> userList() {return this.list();}
user表中模拟一百万数据【使用MySQL存储过程】
CREATE PROCEDURE bachInsert2354()
BEGIN
DECLARE n INT DEFAULT 0;
START TRANSACTION;
WHILE n < 1000000 DOINSERT 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.csdnimg.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】