51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

docker-compose搭建skywalking实现链路追踪

文章转载自: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">&lt;<span class="hljs-name">dependency</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>spring-boot-starter-test<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">scope</span>&gt;</span>test<span class="hljs-tag">&lt;/<span class="hljs-name">scope</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">dependencies</span>&gt;</span>

    <span class="hljs-tag">&lt;<span class="hljs-name">build</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">plugins</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">plugin</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>spring-boot-maven-plugin<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">plugin</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">plugins</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">build</span>&gt;</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 小方块。如下图所示:

点击「追踪」菜单,进入查看链路数据的界面。如下图所示:

相关文章 {#相关文章}

基于docker部署skywalking实现全链路监控

Docker部署SkyWalking实现全链路跟踪和日志监控

赞(2)
未经允许不得转载:工具盒子 » docker-compose搭建skywalking实现链路追踪