跳到主要内容

SkyWalking Docker部署

介绍

Apache SkyWalking是一个开源的分布式系统性能监控工具,而Docker则是目前最流行的容器化平台。通过Docker部署SkyWalking,可以快速搭建监控环境,避免复杂的依赖配置。本章将指导你完成以下内容:

  • SkyWalking Docker镜像的选择
  • 单节点部署(适合开发/测试环境)
  • 集成ElasticSearch存储
  • 常见问题排查
为什么选择Docker部署?
  • 环境一致性:避免"在我机器上能运行"的问题
  • 快速启动:一条命令即可启动全套服务
  • 资源隔离:组件间互不干扰
  • 版本管理:方便切换不同版本

准备工作

确保你的系统已安装:

  • Docker 20.10+
  • Docker Compose 1.29+(可选)
  • 至少4GB可用内存

检查Docker是否正常运行:

bash
docker --version
docker-compose --version

快速启动(开发模式)

使用官方提供的docker-compose.yml快速启动:

  1. 创建docker-compose.yml文件:
yaml
version: '3'
services:
oap:
image: apache/skywalking-oap-server:9.4.0
container_name: skywalking-oap
restart: always
ports:
- "11800:11800" # gRPC API
- "12800:12800" # HTTP API
environment:
SW_STORAGE: h2
SW_HEALTH_CHECKER: default

ui:
image: apache/skywalking-ui:9.4.0
container_name: skywalking-ui
depends_on:
- oap
links:
- oap
restart: always
ports:
- "8080:8080"
environment:
SW_OAP_ADDRESS: http://oap:12800
  1. 启动服务:
bash
docker-compose up -d
  1. 访问UI:
http://localhost:8080

生产环境部署

对于生产环境,建议使用ElasticSearch作为存储后端:

yaml
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.16.3
container_name: elasticsearch
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
ulimits:
memlock:
soft: -1
hard: -1
ports:
- "9200:9200"
volumes:
- es_data:/usr/share/elasticsearch/data

oap:
image: apache/skywalking-oap-server:9.4.0
container_name: skywalking-oap
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
JAVA_OPTS: "-Xms2g -Xmx2g"

ui:
image: apache/skywalking-ui:9.4.0
container_name: skywalking-ui
depends_on:
- oap
links:
- oap
restart: always
ports:
- "8080:8080"
environment:
SW_OAP_ADDRESS: http://oap:12800

volumes:
es_data:
生产环境注意事项
  • 为ElasticSearch分配足够内存(建议8GB+)
  • 考虑使用集群模式而非单节点
  • 配置持久化卷防止数据丢失
  • 设置适当的网络策略和安全组

配置详解

OAP Server环境变量

变量名说明示例值
SW_STORAGE存储类型h2, elasticsearch
SW_STORAGE_ES_CLUSTER_NODESES节点地址elasticsearch:9200
SW_HEALTH_CHECKER健康检查default
JAVA_OPTSJVM参数-Xms4g -Xmx4g

UI配置项

变量名说明示例值
SW_OAP_ADDRESSOAP服务地址http://oap:12800
SW_TIMEOUT请求超时(ms)30000

实际案例:监控Spring Boot应用

  1. 为Java应用添加Agent:
bash
java -javaagent:/path/to/skywalking-agent.jar \
-Dskywalking.agent.service_name=your-application \
-Dskywalking.collector.backend_service=localhost:11800 \
-jar your-app.jar
  1. 在SkyWalking UI中查看拓扑图:

常见问题

1. UI无法连接OAP

检查:

  • OAP容器日志:docker logs skywalking-oap
  • 网络连通性:docker network inspect bridge
  • 端口映射是否正确

2. ElasticSearch启动失败

尝试:

bash
docker run --rm --privileged --pid=host justincormack/nsenter1 /bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"

总结

通过Docker部署SkyWalking,我们实现了:

  • 快速搭建监控环境
  • 灵活的存储配置
  • 便捷的版本管理
  • 资源隔离的运行环境

扩展学习

:::exercise 动手实践

  1. 使用Docker Compose部署SkyWalking + ElasticSearch
  2. 监控一个简单的Spring Boot应用
  3. 在UI中查看服务的响应时间分布 :::