一、部署前准备

经常部署skywalking的朋友都知道,sky一套下来还是比较耗费资源的,特别是10.X之前的版本通常需要搭配ES,反正我在测试部署时因为资源不够经常卡死。
24年10.X开始,官方发布了原生APM数据库banyandb,其特点:

  • 性能与成本:官方测试显示,在同等数据规模下,相比Elasticsearch,BanyanDB可降低约50%的CPU和内存使用,并减少40%的磁盘占用。
  • 云原生友好:专为Kubernetes等容器化环境设计,避免了H2在云环境中因状态丢失导致的问题。
  • 内置管理界面:启动后可通过 http://localhost:17913 访问其内嵌的Web UI,直接查询存储的原始数据

1. 创建目录结构

首先创建skywalking相关挂载目录,确保权限正确:

# 创建核心目录
mkdir -p /data/dockerData/skywalking/{banyandb,oap/logs}
# 设置目录权限
chmod -R 777 /data/dockerData/skywalking

2. 版本说明

  • SkyWalking OAP/UI:10.3.0
  • BanyanDB:0.9.0

二、docker-compose.yml 配置文件

创建 /data/dockerData/skywalking/docker-compose.yml,内容如下:

version: '3.8'

networks:
  skywalking-network:
    driver: bridge

services:
  # 1. BanyanDB 存储服务(核心存储)
  banyandb:
    image: docker.1ms.run/apache/skywalking-banyandb:0.9.0
    container_name: skywalking-banyandb
    networks:
      - skywalking-network
    ports:
      - "17912:17912" 
      - "17913:17913"       
    volumes:
      - /data/dockerData/skywalking/banyandb:/data/banyandb  # 数据持久化
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      # 2. 挂载自定义时区文件到Alpine的时区目录(核心修复)
      - /usr/share/zoneinfo/Asia/Shanghai:/usr/share/zoneinfo/Asia/Shanghai:ro
    command: standalone --stream-root-path /data/banyandb/stream --measure-root-path /data/banyandb/measure  
    environment:
      - TZ=Asia/Shanghai
      # BanyanDB 基础配置
      - BANYANDB_STORAGE_PATH=/data/banyandb
      - BANYANDB_GRPC_PORT=17912
      - BANYANDB_LOG_LEVEL=TRACE
  # 2. SkyWalking OAP 服务(核心分析/接收数据)
  oap:
    image: docker.1ms.run/apache/skywalking-oap-server:10.3.0
    container_name: skywalking-oap
    networks:
      - skywalking-network
    depends_on:
      - banyandb  # 依赖BanyanDB,确保先启动
    ports:
      - "11801:11801"  # Agent 上报数据端口(gRPC)
      - "12800:12800"  # UI 连接OAP的端口(HTTP)
    volumes:
      - /data/dockerData/skywalking/oap/logs:/skywalking/oap-server/logs  # OAP日志持久化
      - /data/dockerData/skywalking/oap/config/application.yml:/skywalking/config/application.yml  # OAP日志持久化    
      - /etc/localtime:/etc/localtime:ro
    environment:
      # 存储类型配置(指定BanyanDB)
      - SW_STORAGE=banyandb
      - SW_STORAGE_BANYANDB_TARGETS=banyandb:17912  # 连接BanyanDB的地址
      # JVM 内存配置(根据服务器配置调整)
      - JAVA_OPTS=-Xms512m -Xmx1024m
      # 核心配置
      - SW_RECEIVER_GRPC_PORT=11801
      - SW_RECEIVER_REST_PORT=12800
      - SW_LOGGING_LEVEL=INFO
      - SW_HEALTH_CHECKER=default
      - SW_TELEMETRY=prometheus
      - TZ=Asia/Shanghai
  # 3. SkyWalking Web UI 服务(可视化界面)
  ui:
    image: docker.1ms.run/apache/skywalking-ui:10.3.0
    container_name: skywalking-ui
    networks:
      - skywalking-network
    depends_on:
      - oap  # 依赖OAP,确保先启动
    ports:
      - "8080:8080"  # UI 访问端口(对外暴露)
    environment:
      # 连接OAP的地址
      - SW_OAP_ADDRESS=http://oap:12800
      # UI 端口配置
      - SW_SERVER_PORT=8080
      - LOGGING_LEVEL_ROOT=INFO
      - TZ=Asia/Shanghai

三、部署启动步骤

1. 启动服务

进入配置文件目录,执行启动命令:

cd /data/dockerData/skywalking
docker-compose up -d

2. 检查服务状态

# 查看容器运行状态
docker-compose ps

# 查看日志(排查问题用)
# 查看BanyanDB日志
docker logs skywalking-banyandb
# 查看OAP日志
docker logs skywalking-oap
# 查看UI日志
docker logs skywalking-ui

四、访问验证

  1. 访问SkyWalking UI:http://服务器IP:8080(默认无账号密码)
  2. 验证端口连通性:
    • 检查11801端口(Agent上报):telnet 服务器IP 11801
    • 检查12800端口(UI连接OAP):curl http://服务器IP:12800/health/check(返回{"status":"UP"}则正常)
    • 检查17912端口(BanyanDB):telnet 服务器IP 17912

五、关键注意事项

  1. 内存配置调整

    • 若服务器内存充足,可调高OAP的JVM参数(如 -Xms2g -Xmx4g),避免内存不足导致OAP崩溃。
    • BanyanDB的存储目录建议挂载独立磁盘,提升IO性能。
  2. 端口冲突

    • 若8080/11801/12800/17912端口被占用,可在docker-compose.yml中修改宿主机端口(如8081:8080)。
  3. 数据持久化

    • /data/dockerData/skywalking 目录包含所有持久化数据,备份时直接备份该目录即可。
  4. Agent 配置
    客户端Agent需配置OAP地址为服务器IP:11800(gRPC方式),示例:

    agent.service_name=your-service-name
    collector.backend_service=服务器IP:11800
    
  5. 版本兼容

    • SkyWalking 10.2.0 必须搭配 BanyanDB 0.8.0。
    • SkyWalking 10.3.0 必须搭配 BanyanDB 0.9.0。

当然这个是我猜的,闲心好的朋友可以分别下载10.2.0以及10.3.0查看config/bydb.dependencies.properties文件就直接写了对应的版本。如果上述文件版本写的是0.8,但是实际部署的0.9则会报错。为了防止出现奇怪的问题,建议直接按照官方建议使用版本。

六、停止/卸载服务

# 停止服务
cd /data/dockerData/skywalking
docker-compose down

# 卸载(含数据删除)
docker-compose down -v
rm -rf /data/dockerData/skywalking