Docker部署skywalking——BanyanDB为存储
一、部署前准备
经常部署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
四、访问验证
- 访问SkyWalking UI:
http://服务器IP:8080(默认无账号密码) - 验证端口连通性:
- 检查11801端口(Agent上报):
telnet 服务器IP 11801 - 检查12800端口(UI连接OAP):
curl http://服务器IP:12800/health/check(返回{"status":"UP"}则正常) - 检查17912端口(BanyanDB):
telnet 服务器IP 17912
- 检查11801端口(Agent上报):
五、关键注意事项
-
内存配置调整:
- 若服务器内存充足,可调高OAP的JVM参数(如
-Xms2g -Xmx4g),避免内存不足导致OAP崩溃。 - BanyanDB的存储目录建议挂载独立磁盘,提升IO性能。
- 若服务器内存充足,可调高OAP的JVM参数(如
-
端口冲突:
- 若8080/11801/12800/17912端口被占用,可在
docker-compose.yml中修改宿主机端口(如8081:8080)。
- 若8080/11801/12800/17912端口被占用,可在
-
数据持久化:
/data/dockerData/skywalking目录包含所有持久化数据,备份时直接备份该目录即可。
-
Agent 配置:
客户端Agent需配置OAP地址为服务器IP:11800(gRPC方式),示例:agent.service_name=your-service-name collector.backend_service=服务器IP:11800 -
版本兼容:
- 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
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 轻舟渡
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果