SkyWalking docker-compose部署

SkyWalking docker-compose部署centos基础环境运行

@Author zz1696742599@163.com
@Date 2023-12-21

开发机环境

  1. centos版本 7.9

  2. docker版本 【docker community 24.0.7
  3. docker-compose 版本 【v2.21.0
  4. jdk【17.0.9】
  5. springboot版本【3.2.0】
  6. skywalking版本【9.7.0】
  7. skywalkingui版本【9.7.0】
  8. skywalking-oap版本【9.7.0】
  9. elasticsearch版本【7.17.16】

SkyWalking部署docker-compose脚本

具体的yaml脚本 (注意请将192.168.111.172替换为服务器地址或者是指定ip地址[前提是可以ping通的地址])

version: '3.9'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.16
    container_name: elasticsearch
    restart: always
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - discovery.type=single-node
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
      - bootstrap.memory_lock=true
      - TAKE_FILE_OWNERSHIP="true"
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
    volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
      - /docker/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins
      - /docker/elk/elasticsearch/data:/usr/share/elasticsearch/data
      - /docker/elk/elasticsearch/logs:/usr/share/elasticsearch/logs
    ulimits:
      memlock:
        soft: -1
        hard: -1
    network_mode: "host"
  oap:
    image: docker.io/apache/skywalking-oap-server:9.7.0
    container_name: oap
    depends_on:
      - elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    environment:
      SW_CORE_RECORD_DATA_TTL: 15
      SW_CORE_METRICS_DATA_TTL: 15
      SW_STORAGE: elasticsearch
      SW_STORAGE_ES_CLUSTER_NODES: 192.168.111.172:9200
      SW_ENABLE_UPDATE_UI_TEMPLATE: true
      TZ: Asia/Shanghai
      JAVA_OPTS: "-Xms2048m -Xmx2048m"
      network_mode: "host"
  ui:
    image: docker.io/apache/skywalking-ui:9.7.0
    container_name: ui
    depends_on:
      - oap
    restart: always
    ports:
      - "18080:18080"
    environment:
      SW_SERVER_PORT: 18080
      SW_OAP_ADDRESS: http://127.0.0.1:12800
    network_mode: "host"



具体参数解析

  1. version: '3.9':指定Docker Compose文件的版本。

  2. services::定义服务,这里包括三个服务:elasticsearch、oap和ui。

  3. elasticsearch:

    • image: docker.elastic.co/elasticsearch/elasticsearch:7.17.16:指定使用的Elasticsearch镜像及其版本。
    • container_name: elasticsearch:为容器指定一个名称。
    • restart: always:设置容器在退出时总是重启。
    • ports::映射宿主机和容器的端口,例如 - 9200:9200 表示将宿主机的9200端口映射到容器的9200端口。
    • environment::设置环境变量,例如 discovery.type=single-node 表示使用单节点发现模式。
    • volumes::数据卷挂载,将宿主机的目录映射到容器的目录。
    • ulimits::设置容器的资源限制,如内存锁(memlock)的软限制和硬限制。
    • network_mode: "host":使用宿主机网络模式,使得容器共享宿主机的网络栈。
  4. oap:

    • image: docker.io/apache/skywalking-oap-server:9.7.0:指定使用的SkyWalking OAP Server镜像及其版本。
    • container_name: oap:为容器指定一个名称。
    • depends_on::设置依赖服务,这里表示oap服务依赖于elasticsearch服务。
    • restart: always:设置容器在退出时总是重启。
    • ports::映射宿主机和容器的端口。
    • environment::设置环境变量,如SkyWalking的数据保留时间、存储类型、Elasticsearch集群节点地址等。
    • network_mode: "host":使用宿主机网络模式。
  5. ui:

    • image: docker.io/apache/skywalking-ui:9.7.0:指定使用的SkyWalking UI镜像及其版本。
    • container_name: ui:为容器指定一个名称。
    • depends_on::设置依赖服务,这里表示ui服务依赖于oap服务。
    • restart: always:设置容器在退出时总是重启。
    • ports::映射宿主机和容器的端口。
    • environment::设置环境变量,如SkyWalking UI的端口号和OAP服务器的地址。
    • network_mode: "host":使用宿主机网络模式。

  1. elasticsearch:

    • discovery.type=single-node: 设置Elasticsearch为单节点模式,适用于开发和测试环境。
    • TZ=Asia/Shanghai: 设置容器内的时区为亚洲/上海。
    • LANG=en_US.UTF-8: 设置容器内的语言和字符集为英文(美国)和UTF-8编码。
    • bootstrap.memory_lock=true: 请求Elasticsearch锁定其内存,以防止在Linux系统下被交换到磁盘。
    • TAKE_FILE_OWNERSHIP="true": 设置Elasticsearch获取文件所有权,可能用于处理数据目录的权限问题。
    • "ES_JAVA_OPTS=-Xms1024m -Xmx1024m": 设置JVM的初始堆大小和最大堆大小为1024MB。
  2. oap:

    • SW_CORE_RECORD_DATA_TTL=15: 设置SkyWalking核心记录数据的保留时间(单位:分钟)。
    • SW_CORE_METRICS_DATA_TTL=15: 设置SkyWalking核心指标数据的保留时间(单位:分钟)。
    • SW_STORAGE=elasticsearch: 设置SkyWalking的数据存储类型为Elasticsearch。
    • SW_STORAGE_ES_CLUSTER_NODES=192.168.111.172:9200: 设置Elasticsearch集群的节点地址和端口。
    • SW_ENABLE_UPDATE_UI_TEMPLATE=true: 启用SkyWalking UI模板的自动更新。
    • TZ=Asia/Shanghai: 设置容器内的时区为亚洲/上海。
    • JAVA_OPTS=-Xms2048m -Xmx2048m: 设置Java应用程序的初始堆大小和最大堆大小为2048MB。
  3. ui:

    • SW_SERVER_PORT=18080: 设置SkyWalking UI的监听端口。
    • SW_OAP_ADDRESS=http://127.0.0.1:12800: 设置SkyWalking OAP服务器的地址和端口。

 使用对应的命令启动docker-compose脚本 

docker compose -f 【指定的docker-compose.yaml文件】up -d

使用docker logs 【指定的yaml中的services名字的服务】查看对应的服务日志

如遇报错自行百度

 之后启动服务器的ip地址:http://【服务器ip地址】:18080

与springboot项目整合
 

  1.  springboot 项目初始化->初始化一个springweb项目

 添加对应pom依赖

<dependency>
	<groupId>org.apache.skywalking</groupId>
	<artifactId>apm-toolkit-logback-1.x</artifactId>
	<version>8.16.0</version>
</dependency>
<dependency>
	<groupId>org.apache.skywalking</groupId>
	<artifactId>apm-toolkit-trace</artifactId>
	<version>8.16.0</version>
</dependency>

下载对应的skywalking对应版本的java-agent https://dlcdn.apache.org/skywalking/java-agent/9.1.0/apache-skywalking-java-agent-9.1.0.tgz

  • 下载最新的9.1.0
  • 解压缩后文件目录为下
  • 将整个根目录的文件移动至springboot项目下的/src/main目录下与resources目录同级
  • 调整skywalking-agent/config/agent.config文件中的两个参数
    agent.service_name=${SW_AGENT_NAME:对应的项目名称}
    collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:服务器地址:11800}
    
  • 调整启动参数 vmoptions,将对应的skywalking-agent.jar对应的绝对路径粘贴至参数框中

 编写对应的接口

import cn.hutool.core.lang.Console;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class TestController {

    @GetMapping("/test")
    public ModelMap test(){
        ModelMap modelMap = new ModelMap();
        modelMap.addAttribute("Sky","Walking");
        Console.log(modelMap.toString());
        return modelMap;
    }
}

启动项目(使用vmoptions参数)后,访问对应的测试接口,等待1分钟左右,再次查看skywalking页面

到此skywalking使用docker-compose脚本部署并且初步整合springboot结束
具体的skywalking使用方法我们之后再讨论

  • 38
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值