SkyWalking 架构图
架构组成
SkyWalking Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
SkyWalking UI :负责提供控台,查看链路等等。
服务搭建
基于docker-compose搭建单机版skywalking
docker-compose.yml文件内容
version: '3.5'
services:
elasticsearch:
image: elasticsearch:6.8.1
container_name: elasticsearch-6.8.1
restart: always
ports:
- 9200:9200
environment:
discovery.type: single-node #es单机模式
TZ: Asia/Shanghai #时区设置
TAKE_FILE_OWNERSHIP: true #解决 volumes 挂载权限问题
ES_JAVA_OPTS: -Xms256m -Xmx256m ##jvm内存分配为256MB
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./elasticsearch/data:/usr/share/elasticsearch/data
oap:
image: apache/skywalking-oap-server:8.5.0-es6
container_name: skywalking-oap-8.5.0
depends_on:
- elasticsearch
links:
- elasticsearch
restart: always
ports:
- 11800:11800
- 12800:12800
environment:
SW_STORAGE: elasticsearch
SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
SW_HEALTH_CHECKER: default
SW_TELEMETRY: prometheus
healthcheck:
test: ["CMD", "./bin/swctl", "ch"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
ui:
image: apache/skywalking-ui:8.5.0
container_name: skywalking-ui-8.5.0
depends_on:
- oap
links:
- oap
restart: always
ports:
- 8888:8080
environment:
SW_OAP_ADDRESS: oap:12800
启动skywalking 容器
#启动容器
docker-compose up -d
#查看启动的容器
docker ps
skywalking-oap 和 skywalking-ui容器时区问题
启动容器后进入skywalking 容器发现时区不是东八区,时间与现在时间相差八小时
而直接使用下面两种配置设置skywalking容器时区是无法生效的
environment:
- TZ=Asia/Shanghai
- TIME_ZONE=Asia/Shanghai
增加映射:
volumes:
- /etc/localtime:/etc/localtime:ro
原因是skywalking容器使用的是 alpine linux镜像, 当前默认不含时区数据包的
解决方法:
进入容器内部
docker exec -it [container id OR container name ] /bin/bash
查看Linux内核版本
cat /etc/issue
安装时区数据包
apk add tzdata
映射时区文件
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
查看时间和时区
date -R
测试服务是否搭建成功
skywalking UI 主界面地址:http://localhost:8888/ #localhost 可替换为你的宿主机ip
SpringBoot与skywalking服务的集成
skywalking中文文档:https://github.com/SkyAPM/document-cn-translation-of-skywalking
官方地址:http://skywalking.apache.org/
Skywalking Agent
负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
下载skywalking 安装包:
国内下载地址:https://mirrors.cloud.tencent.com/apache/skywalking/
官方地址:http://skywalking.apache.org/downloads/
将下载好的安装包解压,进入安装包,我们需要将 agent 目录,拷贝到 Java 应用所在的服务器上。这样,Java 应用才可以配置使用该 SkyWalking Agent。我们来看看 Agent 目录下有哪些:
drwxrwxr-x@ 10 root staff 320 4 9 22:47 activations/
drwxrwxr-x@ 4 root staff 128 4 9 22:47 bootstrap-plugins/
drwxrwxr-x@ 3 root staff 96 4 9 22:11 config/
drwxrwxr-x@ 3 root staff 96 4 18 01:03 logs/
drwxrwxr-x@ 13 root staff 416 4 9 22:51 optional-plugins/ #可选插件
drwxrwxr-x@ 3 root staff 96 4 9 22:51 optional-reporter-plugins/
drwxrwxr-x@ 102 root staff 3264 4 9 22:43 plugins/ #插件
-rw-rw-r--@ root staff 18082886 4 9 22:11 skywalking-agent.jar # SkyWalking Agent
SpringBoot工程搭建
新建一个SpringBoot工程,命名springboot-skywalking-test
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.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.castlzl</groupId>
<artifactId>springboot-skywalking-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-skywalking-test</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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
新建一个SkyWalkingController接口类
@RestController
@RequestMapping("/test")
public class SkyWalkingController {
@GetMapping("/hello")
public String hello() {
return "this is springboot skywalking test";
}
}
IDEA启动项配置
选择Edit Configurations
#skywalking-agent.jar 为本机绝对路径
-javaagent:/Users/leiziliang/my_gitee/skywalking-apm/agent/skywalking-agent.jar
#SW_AGENT_NAME 服务名称
#SW_AGENT_COLLECTOR_BACKEND_SERVICES 连接skywalking oap 后台服务的地址
SW_AGENT_NAME=springboot-skywalking-test;SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
执行 springboot 启动类启动服务
如果说控制台打印如下日志,说明 SkyWalking Agent 加载成功:
DEBUG 2021-04-18 15:36:53:166 main AgentPackagePath : The beacon class location is jar:file:/Users/leiziliang/my_gitee/skywalking-apm/agent/skywalking-agent.jar!/org/apache/skywalking/apm/agent/core/boot/AgentPackagePath.class.
INFO 2021-04-18 15:36:53:169 main SnifferConfigInitializer : Config file found in /Users/leiziliang/my_gitee/skywalking-apm/agent/config/agent.config.
接口请求
打开浏览器请求上面定义好的接口 http://localhost:8880/test/hello ,我们要追踪下该链路。
以上springboot 源码已上传,地址:https://gitee.com/castdlg/springboot-skywalking-test.git
skywalking UI主界面说明
使用浏览器,打开 http://127.0.0.1:8080/ 地址,进入 SkyWalking UI 界面。如下图所示:
点击「拓扑图」菜单,进入查看拓扑图的界面,可以看到 SpringMVC 小方块。如下图所示:
点击「追踪」菜单,进入查看链路数据的界面。如下图所示:
这里面更详细的记录了springboot 服务集成其他中间件与skywalking的集成链路追踪,有兴趣的可以进去看看,作者写的非常详细👍
参考链接:https://blog.csdn.net/weixin_42073629/article/details/106775584