SkyWalking链路追踪部署
为什么要部署 SkyWalking 链路追踪
微服务架构中,一个请求可能经过十几个服务。
当出现响应慢或报错时,很难定位是哪个环节出了问题。SkyWalking 是一款开源的 APM 系统,可以自动采集调用链、性能指标和日志,让你通过一张拓扑图看清全貌。
本文以 Docker 方式部署,手把手带你跑通 SkyWalking链路追踪部署。
安装前需要准备什么
- 一台 Linux 服务器(CentOS 7+ 或 Ubuntu 18.04+),配置至少 4GB 内存和 2 核 CPU。
- Docker 和 Docker Compose 已安装。没装的话,按以下命令一键安装:
# 安装 Docker
curl -fsSL https://get.docker.com | bash
sudo systemctl start docker
sudo systemctl enable docker
# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
- 端口 8080(SkyWalking UI)和 11800(gRPC 数据端口)在防火墙中放行。
用 Docker Compose 快速部署 SkyWalking
SkyWalking 官方提供了 docker-compose.yml,可以一键启动 OAP 后端和 UI。
操作步骤如下:
- 创建一个工作目录并进入:
mkdir ~/skywalking && cd ~/skywalking
- 下载官方 docker-compose 文件(这里使用 9.1.0 版本,你也可以替换成最新版):
wget https://raw.githubusercontent.com/apache/skywalking-docker/master/docker-compose.yml
- 打开 docker-compose.yml,确认 Elasticsearch 版本和路径。如果服务器内存紧张,可以修改 Elasticsearch 的
ES_JAVA_OPTS降低堆内存:
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms512m -Xmx512m
- 启动所有服务:
docker-compose up -d
首次启动会拉取镜像,约 2-3 分钟。
拉取完成后,通过 docker ps 检查容器状态,应该看到 skywalking-oap 和 skywalking-ui 两个容器正常运行。
- 访问
http://你的服务器IP:8080,如果你看到 SkyWalking 的登录页,说明部署成功。默认无密码,直接进入。
避坑指南:高频问题与解决方法
问题 1:Elasticsearch 容器启动失败,提示 max virtual memory areas vm.max_map_count [65530] is too low
解决方法:在宿主机执行 sudo sysctl -w vm.max_map_count=262144,然后重启容器。
这个错误很常见,务必记得调大。
问题 2:SkyWalking UI 能打开,但服务列表为空
原因通常是没有应用接入 Agent。
链路追踪需要你在 Java 应用启动时添加 Agent 参数,例如:
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=my-app \
-Dskywalking.collector.backend_service=你的服务器IP:11800 \
-jar your-app.jar
问题 3:端口 8080 被占用
修改 docker-compose.yml 中 UI 服务的端口映射,
将 "8080: 改为
8080""你自己选的新端口:,
8080"
然后 docker-compose up -d 重建。
验证链路追踪是否生效
- 打开 SkyWalking UI(http://服务器IP:8080),点击左侧“拓扑图”菜单。
- 如果你已经启动了一个带 Agent 的应用,并访问了它的接口,拓扑图中会出现该服务的节点。
- 点击“追踪”菜单,可以看到具体的请求调用链,包括每个 Span 的耗时和状态。
快速自检命令:在服务器执行 curl http://你的应用地址 产生新请求,然后刷新 UI 的追踪页面,应该能立即看到新记录。
如果你没有应用,可以先用官方示例:
docker run -d --name skywalking-demo \
-p 8081:8080 \
-e SW_AGENT_COLLECTOR_BACKEND_SERVICES=你的服务器IP:11800 \
apache/skywalking-java-demo:latest
然后访问 http://服务器IP:8081 生成请求,回到 SkyWalking UI 查看。
总结
本文用最简单的方式完成了 SkyWalking链路追踪部署。
从环境检查、Docker 启动到 Agent 接入,每一步都写了命令和验证方法。
如果你在生产环境使用,建议将 Elasticsearch 换成集群模式并调整持久化配置;
但新手阶段,单节点足够学习链路追踪的全流程。
遇到问题先回看避坑部分,大概率能直接解决。