文章转载自:docker-compose搭建skywalking
质量监控 skywalking 部署源码相关代码,可直接使用
SkyWalking 架构图 {#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搭建单机版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 容器 {#启动skywalking-容器}
# 启动容器
docker-compose up -d
# 查看启动的容器`
docker ps
`
skywalking-oap 和 skywalking-ui容器时区问题 {#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服务的集成 {#springboot与skywalking服务的集成}
skywalking中文文档:https://github.com/SkyAPM/document-cn-translation-of-skywalking
官方地址:http://skywalking.apache.org/
Skywalking Agent {#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工程,命名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>
<span class="hljs-tag"><<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-test<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">scope</span>></span>test<span class="hljs-tag"></<span class="hljs-name">scope</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependencies</span>></span>
<span class="hljs-tag"><<span class="hljs-name">build</span>></span>
<span class="hljs-tag"><<span class="hljs-name">plugins</span>></span>
<span class="hljs-tag"><<span class="hljs-name">plugin</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-maven-plugin<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"></<span class="hljs-name">plugin</span>></span>
<span class="hljs-tag"></<span class="hljs-name">plugins</span>></span>
<span class="hljs-tag"></<span class="hljs-name">build</span>></span>
</project>`
`
新建一个SkyWalkingController接口类
@RestController
@RequestMapping("/test")
public class SkyWalkingController {
<span class="hljs-meta">@GetMapping("/hello")</span>
<span class="hljs-keyword">public</span> String <span class="hljs-title function_">hello</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> <span class="hljs-string">"this is springboot skywalking test"</span>;
}
`}
`
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主界面说明 {#skywalking-ui主界面说明}
使用浏览器,打开 http://127.0.0.1:8080/ 地址,进入 SkyWalking UI 界面。如下图所示:
点击「拓扑图」菜单,进入查看拓扑图的界面,可以看到 SpringMVC 小方块。如下图所示:
点击「追踪」菜单,进入查看链路数据的界面。如下图所示: