Skywalking
一、Skywalking介绍
Skywalking是国人吴晟开发的链路追踪工具,与2017年进入Apache的项目孵化器,如今已成为Apache的一个开源项目。
Skywalking提供了强大的APM应用性能管理功能,专门为微服务等基于容器的云原生架构提供监控服务,Skywalking通过探针收集应用的各项指标,并进行分布式的链路追踪。Skywalking会感知微服务之间的调用链路的关系。生产相应的统计数据。
特性:
1、支持告警;
2、采用探针技术,对业务代码零侵入;
3、轻量高效,无需额外的大数据平台;
4、提供多种监控手段,支持多语言探针;
5、简洁强大的可视化后台管理界面;
6、自身采用模块化架构,包括探针Agent、UI、观测分析平台和存储模块。
二、Skywalking安装
2.1下载、安装、启动windows版Skywalking9.1服务端
skywalking官网地址
http://skywalking.apache.org
该官网地址没有9.1版本的包,我在https://chat.deepseek.com/直接搜索的,会有对应版本的链接,直接下载
apache-skywalking-apm-9.1.0.tar.gz
解压到对应目录,Ctrl+R,输入cmd,进入服务目录启动服务
f:
cd skywalking\apache-skywalking-apm-bin\bin
startup.bat
实际上启动了2个服务,oap-service:OAP,其实现类库位于oap-libs子目录下。
webapp-service:提供UI的webapp应用,位于webapp子目录下。
会有两个对话框弹出表示服务已启动,访问服务:
http://127.0.0.1:8080/

三、在微服务中安置探针
9.0以上版本需要从官网下载探针包。低版本自带探针。
apache-skywalking-java-agent-9.1.0.tgz
3.1修改微服务配置
在微服务中安置探针:
运行-编辑配置,修改选项,打开添加VM选项,每个微服务都配置,应用-保存,最后是重启以下微服务,会有连接skywalking的日志。
-javaagent:F:\skywalking\skywalking-agent\skywalking-agent.jar -Dskywalking.agent.service_name=hello-provider-service -Dskywalking.collector.backend_service=127.0.0.1:11800
-javaagent:F:\skywalking\skywalking-agent\skywalking-agent.jar -Dskywalking.agent.service_name=hello-consumer-service -Dskywalking.collector.backend_service=127.0.0.1:11800


3.2业务访问微服务
http://127.0.0.1:8081/greet/hhh

3.3查看skywalking服务端

3.4查看拓扑图

3.5查看链路追踪
skywalking会为每一条调用链路都分配了唯一的追踪ID。
3.6查看监控数据


3.7性能分析


分析是哪个服务慢:

上图可以看出,消费者自身耗时239ms,远程调用接口耗时60秒,总耗时200264ms,且在提供者可以看到该交易在提供者耗时8秒,总耗时60秒结束是因为远程调用默认60秒就读超时。

3.8监控告警
服务端的config/alarm-settings.yml文件中有默认的监控项,如下是一个最近3分钟内服务的平均响应时间 > 1秒”的规则。
rules:
# Rule unique name, must be ended with `_rule`.
service_resp_time_rule:
metrics-name: service_resp_time
op: ">"
threshold: 1000
period: 10
count: 3
silence-period: 5
message: Response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes.
说明:
threshold 1000 阈值 1 秒(单位:毫秒)
period 10 检查周期 10 分钟
count 3 连续 3 次满足条件就触发
silence-period: 5 = 告警触发后,5分钟内不再重复发送相同的告警
模拟超时1秒的交易
在消费者或者提供者方法中添加:
try {
// 方法1: TimeUnit(推荐)
TimeUnit.SECONDS.sleep(0);
// 方法2: Thread.sleep 毫秒
// Thread.sleep(80 * 1000);
} catch (InterruptedException e) {
System.err.println("睡眠被中断了!");
Thread.currentThread().interrupt(); // 恢复中断状态
}
重启服务。
访问接口让超时1秒。
查看告警:

3.9自定义链路追踪
3.9.1给服务的pom.xml添加trace依赖,并重新加载
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>8.11.0</version>
</dependency>
3.9.2在需要在链路追踪展示的方法上添加@Trace注解,在参数上添加@Tag注解
package demo.helloprovider;
import org.apache.skywalking.apm.toolkit.trace.Tag;
import org.apache.skywalking.apm.toolkit.trace.Trace;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.TimeUnit;
@RestController
public class HelloProviderController {
/*
@GetMapping(value = "/greet/{username}")
public String greet(@PathVariable String username) {
return "Hello," + username;
}
*/
@Value("${server.port}")
private String servicePort;
@Value("${spring.application.name}")
private String serviceName;
@GetMapping(value = "/greet/{username}")
@Trace(operationName = "provide_greet")
@Tag(key = "arg1",value = "arg[0]")
@Tag(key="result",value = "returnedOjb")
public String greet(@PathVariable String username) {
System.out.println("username"+username);
try {
// 方法1: TimeUnit(推荐)
TimeUnit.SECONDS.sleep(0);
// 方法2: Thread.sleep 毫秒
// Thread.sleep(80 * 1000);
} catch (InterruptedException e) {
System.err.println("睡眠被中断了!");
Thread.currentThread().interrupt(); // 恢复中断状态
}
return "Hello," + username
+"<br>Service Name:" + serviceName+"<br>Service Port:"+servicePort;
}
}
3.9.3重新访问到该方法的接口,在skywalking查看链路追踪
可以看到刚才给方法添加的@Trace注解已生效,可以在链路追踪看到provide_greet端点(该方法的信息),方法执行了2ms。
点击上图端点,可以看到该端点由@Tag标签标注的arg1和result
测试,在方法中休眠2秒,查看链路追踪。
try {
// 方法1: TimeUnit(推荐)
TimeUnit.SECONDS.sleep(2);
// 方法2: Thread.sleep 毫秒
// Thread.sleep(80 * 1000);
} catch (InterruptedException e) {
System.err.println("睡眠被中断了!");
Thread.currentThread().interrupt(); // 恢复中断状态
}

3.10忽略端点
项目-运行-编辑
-javaagent:F:\skywalking\skywalking-agent\skywalking-agent.jar -Dskywalking.agent.service_name=hello-provider-service
-Dskywalking.trace.ignore_path=/greet/*
-Dskywalking.collector.backend_service=127.0.0.1:11800
更多推荐




所有评论(0)