基于Docker Compose一键部署SkyWalking+BanyanDB全栈链路监控平台
1. 为什么选择Docker Compose部署SkyWalking+BanyanDB
全链路监控已经成为现代分布式系统不可或缺的基础设施,而SkyWalking作为Apache顶级开源项目,凭借其强大的分布式追踪、服务网格观测和指标分析能力,在众多监控工具中脱颖而出。但传统部署方式需要分别配置OAP服务、UI界面和存储组件,步骤繁琐且容易出错。这正是Docker Compose的价值所在——它让复杂系统的部署变得像搭积木一样简单。
我去年在金融行业落地监控系统时,曾手动部署过SkyWalking 8.x版本,光是处理各组件间的网络通信就花了整整两天。后来改用Docker Compose后,同样的工作只需要15分钟。最新版的SkyWalking 10.x与BanyanDB的集成更加紧密,通过容器化部署可以充分发挥其云原生优势。BanyanDB作为专为观测数据设计的时序数据库,相比Elasticsearch等通用存储,在存储压缩率和查询性能上都有显著提升。
2. 环境准备与前置检查
2.1 硬件资源规划
虽然容器化部署对资源需求有所降低,但合理的资源配置仍然重要。根据实测经验:
- 开发环境:至少2核CPU/4GB内存/50GB存储
- 生产环境:建议4核CPU/8GB内存/200GB存储(数据保留7天)
特别要注意的是文件描述符限制,这是新手最容易踩的坑。建议执行以下命令永久修改系统限制:
echo "* soft nofile 102400" >> /etc/security/limits.conf
echo "* hard nofile 102400" >> /etc/security/limits.conf
2.2 Docker环境配置
推荐使用Docker 20.10+版本,并确保已安装Docker Compose插件(V2版本)。可以通过以下命令验证:
docker compose version
如果遇到镜像拉取慢的问题,可以配置国内镜像源。这里分享一个经过验证的配置方案:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.nju.edu.cn",
"https://mirror.baidubce.com"
]
}
EOF
sudo systemctl restart docker
3. 编写Docker Compose编排文件
3.1 核心服务定义
创建docker-compose.yml文件,这是整个部署的核心。下面这个配置是我在三个不同项目中验证过的稳定版本:
version: '3.8'
services:
banyandb:
image: apache/skywalking-banyandb:latest
container_name: banyandb
ports:
- "17913:17913"
command: standalone --stream-root-path /tmp/stream-data --measure-root-path /tmp/measure-data
ulimits:
nofile: 102400
oap:
image: apache/skywalking-oap-server:latest
container_name: oap
depends_on:
- banyandb
environment:
SW_STORAGE: banyandb
SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
JAVA_OPTS: "-Xms2g -Xmx2g"
volumes:
- ./oap/config:/skywalking/config
ports:
- "11800:11800"
- "12800:12800"
ulimits:
nofile: 102400
ui:
image: apache/skywalking-ui:latest
container_name: ui
depends_on:
- oap
environment:
SW_OAP_ADDRESS: http://oap:12800
ports:
- "8080:8080"
3.2 关键配置解析
- 网络拓扑:使用Docker默认的bridge网络,各服务通过服务名自动DNS解析
- 存储配置:BanyanDB的standalone模式已满足大多数场景,生产环境可考虑集群部署
- 内存分配:OAP服务默认1GB内存可能不足,建议调整为2GB(通过JAVA_OPTS)
- 配置文件:将OAP的application.yml挂载到宿主机方便修改
4. 启动与验证
4.1 一键启动所有服务
执行以下命令启动整个监控平台:
mkdir -p oap/config
docker compose up -d
首次启动时会自动拉取镜像,整个过程约3-5分钟(取决于网络速度)。可以通过以下命令观察启动日志:
docker compose logs -f oap
4.2 服务健康检查
等待1-2分钟后,逐个验证服务状态:
# 检查BanyanDB
curl http://localhost:17913/healthz
# 检查OAP服务
curl http://localhost:12800/v3/management/healthCheck
# 检查UI服务
curl -I http://localhost:8080
4.3 界面访问与配置
- SkyWalking UI:浏览器访问
http://服务器IP:8080 - BanyanDB管理界面:访问
http://服务器IP:17913/debug/pprof
在UI界面右上角的"齿轮"图标中,建议修改以下默认配置:
- 时区设置为Asia/Shanghai
- 调整数据刷新间隔为15秒
- 开启自动拓扑图布局
5. 应用接入实战
5.1 Java应用接入
以Spring Boot应用为例,下载最新Java Agent:
wget https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz
tar -zxvf apache-skywalking-java-agent-9.0.0.tgz
启动应用时添加JVM参数:
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=your_service_name \
-Dskywalking.collector.backend_service=localhost:11800 \
-jar your_application.jar
5.2 Kubernetes环境接入
对于K8s部署的应用,可以通过initContainer方式挂载Agent:
initContainers:
- name: skywalking-agent
image: busybox
command: ['sh', '-c', 'wget -O /skywalking/agent.tar.gz https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz && tar -zxvf /skywalking/agent.tar.gz -C /skywalking/']
volumeMounts:
- mountPath: /skywalking
name: skywalking-agent
6. 常见问题排查指南
6.1 容器启动失败排查
如果OAP服务启动失败,最常见的原因是配置文件问题。可以进入容器检查配置:
docker exec -it oap cat /skywalking/config/application.yml
6.2 数据存储异常处理
当发现监控数据没有持久化时,检查BanyanDB日志:
docker compose logs banyandb | grep -i error
临时解决方案是重启BanyanDB容器,长期解决方案应考虑挂载持久化卷:
volumes:
- banyandb-data:/tmp
volumes:
banyandb-data:
6.3 性能调优建议
对于高负载环境,建议调整以下参数:
- OAP的JVM内存增加到4GB
- 修改BanyanDB的缓存配置
- 增加OAP实例数量实现水平扩展
我在生产环境中发现,当TPS超过5000时,单节点OAP会出现处理延迟。这时可以通过修改docker-compose.yml,添加多个OAP实例:
oap1:
<<: *oap-config
container_name: oap1
oap2:
<<: *oap-config
container_name: oap2
7. 进阶配置与优化
7.1 自定义监控指标
在application.yml中添加自定义指标收集规则:
metrics:
default:
- name: custom_metric
exp: "sum(instance_jvm_memory_max{area='heap'}) by (service)"
7.2 告警规则配置
创建alarm-settings.yml文件并挂载到OAP容器:
rules:
service_resp_time_rule:
metrics-name: service_resp_time
op: ">"
threshold: 1000
period: 10
count: 2
silence-period: 5
message: 服务 {name} 响应时间超过1秒
7.3 数据保留策略
BanyanDB默认保留7天数据,如需修改需要调整启动参数:
command: standalone --retention-policy "7d" --stream-root-path /data/stream --measure-root-path /data/measure
实际部署中遇到过磁盘空间不足的情况,后来我们通过定期清理旧数据解决了这个问题。建议生产环境至少预留200GB存储空间,或者考虑使用分布式存储方案。
更多推荐
所有评论(0)