分布式链路追踪_skywalking_学习(2)
一、分布式链路追踪_skywalking :Rpc 调用监控
1、Skywalking(6.5.0) 支持的 Rpc 框架有以下几种:
- Dubbo 2.5.4 -> 2.6.0
- Dubbox 2.8.4
- Apache Dubbo 2.7.0
- Motan 0.2.x -> 1.1.0
- gRPC 1.x
- Apache ServiceComb Java Chassis 0.1 -> 0.5,1.0.x
- SOFARPC 5.4.0
2、使用 Spring Boot 和 Dubbo 搭建一个简单的服务提供方和服务消费方来测试 Skywalking 对于 Rpc 调用的支持。新建两个工程(skywalking_dubbo_consumer 和skywalking_dubbo_provider),并打包 skywalking_dubbo_consumer.jar 和skywalking_dubbo_provider.jar 来进行测试。
2.1 打开 idea,创建 服务消费方 skywalking_dubbo_consumer 的 maven 工程。
--> idea --> File --> New --> Project --> Maven Project SDK: ( 1.8(java version "1.8.0_131" ) --> Next --> Groupld : ( djh.it )Artifactld : ( skywalking_dubbo_consumer )Version : 1.0-SNAPSHOT--> Name: ( skywalking_dubbo_consumer )Location: ( \skywalking_dubbo_consumer\ ) --> Finish
2.2 在工程 skywalking_dubbo_consumer (模块)中的 pom.xml 中导入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>djh.it</groupId><artifactId>skywalking_dubbo_consumer</artifactId><version>0.0.1-SNAPSHOT</version><name>skywalking_dubbo_consumer</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.alibaba.spring.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.0.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
2.3 在工程 skywalking_dubbo_consumer (模块)中,创建配置文件 application.properties。
## 2024-5-21 创建配置文件 application.propertiesspring.application.name=skywalking_dubbo_consumer
server.port=8085
2.4 在工程 skywalking_dubbo_consumer (模块)中,创建 接口类 IHelloService.java。
/**
* 2024-5-21 创建 接口类 IHelloService.java
*
* 简化项目的开发,将 IHelloService接口在消费方和提供方都编写一份
*/
package djh.it.api;public interface IHelloService {public String hello();
}
2.5 在工程 skywalking_dubbo_consumer (模块)中,创建 启动类 SkywalkingDubboConsumerApplication.java。
/**
* 2024-5-21 创建 启动类 SkywalkingDubboConsumerApplication.java
*/
package djh.it.skywalking_dubbo_consumer;import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@EnableDubboConfiguration //添加dubbo生效注解
public class SkywalkingDubboConsumerApplication {public static void main(String[] args) {SpringApplication.run(SkywalkingDubboConsumerApplication.class, args);}
}
2.6 在工程 skywalking_dubbo_consumer (模块)中,创建 Controller 类 TestController.java 进行测试。
/**
* 2024-5-21 创建 Controller 类 TestController.java
*/
package djh.it.skywalking_dubbo_consumer.controller;import com.alibaba.dubbo.config.annotation.Reference;
import djh.it.api.IHelloService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class TestController {//采用直连而非从注册中心获取服务地址的方式,在 @Reference 注解 中声明@Reference(url = "dubbo://127.0.0.1:20880")private IHelloService helloService;@GetMapping("/hello")public String hello(){return helloService.hello();}
}
3、创建 服务提供方 skywalking_dubbo_provider 的 maven 工程
3.1 打开 idea,创建 artifactId 名为 skywalking_dubbo_provider 的 maven 工程。
--> idea --> File --> New --> Project --> Maven Project SDK: ( 1.8(java version "1.8.0_131" ) --> Next --> Groupld : ( djh.it )Artifactld : ( skywalking_dubbo_provider )Version : 1.0-SNAPSHOT--> Name: ( skywalking_dubbo_provider )Location: ( \skywalking_dubbo_provider\ ) --> Finish
3.2 在工程 skywalking_dubbo_provider (模块)中的 pom.xml 中导入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>djh.it</groupId><artifactId>skywalking_dubbo_provider</artifactId><version>0.0.1-SNAPSHOT</version><name>skywalking_dubbo_provider</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--添加springboot和dubbo集成配置--><dependency><groupId>com.alibaba.spring.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.0.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
3.3 在工程 skywalking_dubbo_provider (模块)中,创建配置文件 application.properties。
## 2024-5-21 创建配置文件 application.properties## 为了简化环境搭建,采用了本地直接调用的方式,所以将注册中心写成 N/A 表示不注册到注册中
心。spring.application.name=skywalking_dubbo_provider
spring.dubbo.server=true
spring.dubbo.registry=N/A
server.port=8086
3.4 在工程 skywalking_dubbo_provider (模块)中,创建 接口类 IHelloService.java。
/**
* 2024-5-21 创建 接口类 IHelloService.java
*
* 简化项目的开发,将 IHelloService接口在消费方和提供方都编写一份
*/
package djh.it.api;public interface IHelloService {public String hello();
}
3.5 在工程 skywalking_dubbo_provider (模块)中,创建 启动类 SkywalkingDubboProviderApplication.java。
/**
* 2024-5-21 创建 启动类 SkywalkingDubboProviderApplication.java
*/
package djh.it.skywalking_dubbo_provider;import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@EnableDubboConfiguration //添加dubbo生效注解
public class SkywalkingDubboProviderApplication {public static void main(String[] args) {SpringApplication.run(SkywalkingDubboProviderApplication.class, args);}
}
3.6 在工程 skywalking_dubbo_provider (模块)中,创建 接口实现 类 HelloServiceImpl.java。
/**
* 2024-5-21 创建 接口实现 类 HelloServiceImpl.java
*/
package djh.it.skywalking_dubbo_provider.service;import com.alibaba.dubbo.config.annotation.Service;
import djh.it.api.IHelloService;
import org.springframework.stereotype.Component;@Service(interfaceClass = IHelloService.class)
@Component
public class HelloServiceImpl implements IHelloService {@Overridepublic String hello() {return "hello skywalking";}
}
4、打包 skywalking_dubbo_consumer.jar 和 skywalking_dubbo_provider.jar 上传
至 /usr/local/skywalking 目录下。
5、复制两份 agent,防止使用的冲突。
cd /usr/local/skywalking/apache-skywalking-apm-bin/
cp -r agent agent_dubbo_provider
cp -r agent agent_dubbo_consumer
6、修改 agent_dubbo_provider 配置中的应用名为:
vi agent_dubbo_provider/config/agent.config# The service name in UI
agent.service_name=${SW_AGENT_NAME:dubbo_provider}
7、接着修改 agent_dubbo_consumer:修改应用名:
vi agent_dubbo_consumer/config/agent.config# The service name in UI
agent.service_name=${SW_AGENT_NAME:dubbo_consumer}
8、先启动 provider,等待启动成功。
# 切换到目录下
cd /usr/local/skywalking# 启动 provider
java -javaagent:/usr/local/skywalking/apache-skywalking-apm-
bin/agent_dubbo_provider/skywalking-agent.jar -jar
skywalking_dubbo_provider.jar &
9、启动 consumer,等待启动成功。
# 切换到目录下
cd /usr/local/skywalking# 启动 consumer
java -javaagent:/usr/local/skywalking/apache-skywalking-apm-
bin/agent_dubbo_sonsumer/skywalking-agent.jar -jar
skywalking_dubbo_consumer.jar &
10、调用接口,接口地址为: http://虚拟机IP地址:8085/hello
此时如果页面显示:hello skywalking ,那么 dubbo 的调用就成功了。
11、可以打开 skywalking 查看 dubbo 调用的监控情况。
二、分布式链路追踪_skywalking : Mysql 调用监控
1、使用 docker 启动 Mysql – 安装 docker
引言:
Docker 是一种流行的容器化平台,用于在不同的环境中快速部署和运行应用程序。
它提供了一种轻量级和便捷的方式来封装、分发和管理应用程序及其依赖项。
所以使用 docker 启动 Mysql 比较简单便捷。
1.1 安装 docker:更新软件包索引:
sudo apt-get update
1.2 安装 docker:允许 APT 使用 HTTPS:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
1.3 安装 docker:添加 Docker 官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
1.4 安装 docker:添加 Docker 的稳定版本仓库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
1.5 安装 docker:再次更新软件包索引:
sudo apt-get update
1.6 安装 docker:安装 Docker Community Edition(CE)(社区版):
sudo apt-get install docker-ce
1.7 安装 docker:验证 Docker 是否安装成功并运行(检查 Docker 服务的状态):
sudo systemctl status docker
sudo docker info
如果显示 active (running) 则表示 Docker 服务已成功启动。
1.8 安装 docker:或者验证安装(检查 Docker 版本),或者简单地运行:
# 检查 Docker 版本
sudo docker --version
sudo docker -V # 简单地运行拉取镜像
sudo docker run hello-world
如果安装成功,你将看到 Docker 拉取 hello-world 镜像并运行容器的信息。
1.9 安装 docker:查看 docker 本地镜像,或拉取 mysql:
# 查看 docker 本地镜像
sudo docker images# 拉取 mysql
docker pull mysql
2、安装 mysql 或 运行 MySQL 容器
docker run --name mysql-server -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest# 例如:
docker run -di --name=skywalking_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7
参数说明:
–name :给你的容器设定了一个名字 mysql-server。
-e :MYSQL_ROOT_PASSWORD=my-secret-pw 设置了root用户的密码。
-d :表示以后台模式运行容器。
-di :后端守护式启动。
mysql:latest 指定了要运行的 MySQL 镜像版本。
33306:3306 :将 33306 端口映射到 3306 端口。
MYSQL_ROOT_PASSWORD :设置 root 用户初始化密码为 123456。
3、使用工具(SQLyong)连接 mysql,端口为 33306 密码为 123456。
4、创建数据库:
数据库名称:skywalking
基字符集:utf8
数据库排序规则:utf8_unicode_ci
5、执行建表语句:
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
6、向数据库中插入数据。
insert into `t_user`(`name`) values ('张三'),('李四'),('王五');
7、创建一个 Spring Boot 工程 skywalking_mysql,集成 Spring Data JDBC。
7.1 打开 idea,创建 skywalking_mysql 的 maven 工程。
--> idea --> File --> New --> Project --> Maven Project SDK: ( 1.8(java version "1.8.0_131" ) --> Next --> Groupld : ( djh.it )Artifactld : ( skywalking_mysql )Version : 1.0-SNAPSHOT--> Name: ( skywalking_mysql )Location: ( \skywalking_mysql\ ) --> Finish
7.2 在工程 skywalking_mysql (模块)中的 pom.xml 中导入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>djh.it</groupId><artifactId>skywalking_mysql</artifactId><version>0.0.1-SNAPSHOT</version><name>skywalking_mysql</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.46</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
7.3 在工程 skywalking_mysql (模块)中,创建配置文件 application.properties。
## 2024-5-21 创建配置文件 application.propertiesspring.datasource.url=jdbc:mysql://localhost:33306/skywalking
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
server.port=8087
7.4 在工程 skywalking_mysql (模块)中,创建 pojo 类 User.java。
/**
* 2024-5-21 创建 创建 pojo 类 User.java
*/
package djh.it.skywalking_mysql.pojo;import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;@Table("t_user")
public class User {@Idprivate Integer id;private String name;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +'}';}
}
7.5 在工程 skywalking_mysql (模块)中,创建 dao 持久层 接口类 UserRepository。
/**
* 2024-5-21 创建 dao 持久层 接口类 UserRepository
*/
package djh.it.skywalking_mysql.dao;import djh.it.skywalking_mysql.pojo.User;
import org.springframework.data.repository.CrudRepository;public interface UserRepository extends CrudRepository<User, Integer> {
}
7.6 在工程 skywalking_mysql (模块)中,创建 Controller 类 MysqlController.java 进行测试。
/**
* 2024-5-21 创建 Controller 类 MysqlController.java
*/
package djh.it.skywalking_mysql.controller;import djh.it.skywalking_mysql.dao.UserRepository;
import djh.it.skywalking_mysql.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;@RestController
public class MysqlController {@Autowiredprivate UserRepository userRepository;@GetMapping("/users")public List<User> findAll(){List<User> result = new ArrayList<>();userRepository.findAll().forEach((user) -> {result.add(user);});return result;}
}
7.7 在工程 skywalking_mysql (模块)中,创建 启动类 SkywalkingMysqlApplication.java。
/**
* 2024-5-21 创建 启动类 SkywalkingMysqlApplication.java
*/
package djh.it.skywalking_mysql;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SkywalkingMysqlApplication {public static void main(String[] args) {SpringApplication.run(SkywalkingMysqlApplication.class, args);}}
8、将工程 skywalking_mysql 打包成 skywalking_mysql.jar 并上传至 /usr/local/skywalking 目录下。
9、复制 agent,更名为:agent_mysql,防止使用的冲突。
cd /usr/local/skywalking/apache-skywalking-apm-bin/
cp -r agent agent_mysql# 修改 agent_mysql 配置中的应用名为:
vi agent_mysql/config/agent.config# The service name in UI
agent.service_name=${SW_AGENT_NAME:skywalking_mysql}# 保存并退出编辑器。
:wq!
10、启动 skywalking_mysql 应用,等待启动成功。
#切换到目录下
cd /usr/local/skywalking#启动spring boot
java -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent_mysql/skywalking-agent.jar -jar skywalking_mysql.jar &
11、调用接口,接口地址为: http://虚拟机IP地址:8087/users
12、此时如果页面显示 mysql 中数据。
[{“id”:1,“name”:“张三”},{“id”:2,“name”:“李四”},{“id”:3,“name”:“王五”}]
说明 mysql 的调用就成功了。
13、打开 skywalking 查看 mysql 调用的监控情况。
上一节关联链接请点击:
# 分布式链路追踪_skywalking_学习(1)