一、SkyWalking的介绍
1、为什么要使用SkyWalking?
微服务的请求会构成一个网状的调用链,如果某一个节点发生异常或超时则整个调用链都会受到影响, 这就导致定位/诊断服务异常变得异常复杂.
2、什么是SkyWalking?
SkyWalking是一个国产的微服务性能监控工具(apm),作用:链路追踪、性能分析、日志采集、告警
二、OAP的安装和启动
1、解压apache-skywalking-apm-9.4.0.tar.gz
注意:不能包含中文路径
2、修改webapp\application.yml
serverPort: ${SW_SERVER_PORT:-18080} #端口号
3、启动和关闭
启动:
双击/bin/startup.bat
关闭:
叉掉黑窗口
三、微服务集成agent
你的 skywalking-agent.jar包地址
-javaagent:D:\SkyWalking\skywalking-agent\skywalking-agent.jar
在skywalking上显示的服务名
-DSW_AGENT_NAME=skywalking-consumer
#你的skywalking-aop-server地址及端口号
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
四、持久化追踪数据
1、修改config/application.yml
storage:
selector: ${SW_STORAGE:mysql}
mysql:
properties:
jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://192.168.61.130:3306/swtest?rewriteBatchedStatements=true&useSSL=false&characterEncoding=UTF-8"}
dataSource.user: ${SW_DATA_SOURCE_USER:root}
dataSource.password: ${SW_DATA_SOURCE_PASSWORD:1111}
2、创建`swtest`数据库
注意:无须建表
3、拷贝mysql的驱动
注意:拷贝到oap-libs目录下
4、重启skywalking
五、自定义链路追踪(追踪service)
1、pom.xml
<!--skywalking 工具类,为了自定义链路追踪-->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>8.5.0</version>
</dependency>
2、添加注解
//将业务方法加入到追踪链路中
@Trace
//为追踪链路增加其额外的信息,比如记录参数和返回信息
@Tags({
@Tag(key = "参数", value = "arg[0]"),
@Tag(key = "返回值", value = "returnedObj")
})
@Override
public String testTrace(String str) {
return "hello, " + str;
}
六、性能分析
... ...
七、日志采集
1、pom.xml
<!--apm‐toolkit‐logback‐1.x 日志 -->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.5.0</version>
</dependency>
2、logback.xml
... ...
八、告警
1、添加网络钩子
修改config/alarm-settings.yml:
webhooks:
2、pojo
@Data
public class SkAlarmDTO {
private Integer scopeId;
private String scope;
private String name;
private String id0;
private String id1;
private String ruleName;
private String alarmMessage;
private Long startTime;
}
3、controller
@RestController
@RequestMapping("/skAlarm")
public class SkAlarmController {
@RequestMapping("/getMsg")
public void getMsg(@RequestBody List<SkAlarmDTO> skAlarmDTOList){
... ...
}
}
4、测试
①自定义异常
@RequestMapping(value = "/getUserById/{id}")
public User getUserById(@PathVariable Integer id) {
int a = 6/0;
return userFeign.getUserById(id);
}
②访问异常接口并等待告警