家用住宅主机Linux SkyWalking链路追踪容器服务
家用 Linux 主机部署 SkyWalking 链路追踪容器服务教程
如果你家里有一台 Linux 主机(比如旧电脑或 NAS),想用它来搭建一个分布式系统的链路追踪平台,SkyWalking 是一个轻量级且社区活跃的选择。
本文将从零开始,帮你用 Docker Compose 在本地网络里跑起 SkyWalking 的 OAP(数据存储与分析)和 UI(可视化界面),并且通过一个简单的 Spring Boot 应用验证链路数据是否正常上报。
准备条件
在开始之前,需要确认你的家用主机满足以下条件:
- 操作系统:Linux(Ubuntu / CentOS / Debian 均可,内核版本建议 4.0 以上)。
- 已安装 Docker 和 Docker Compose:
- Docker >= 20.10
- Docker Compose >= 1.29(或使用 docker compose 插件)
- 网络环境:主机可以正常访问 Docker Hub 或其他镜像仓库(如果你在内网,请提前准备好 SkyWalking 镜像)。
- 预留端口:需要开放 11800(gRPC 协议,Agent 上报用)、12800(HTTP 协议,Agent 上报备用)、8080(SkyWalking UI 的 HTTP 端口)。如果主机有防火墙,记得放通这些端口。
使用 Docker Compose 部署 SkyWalking
1. 创建项目目录
在主机的 /home/yourname/ 下创建一个叫 skywalking 的文件夹,用于存放配置文件和数据。
mkdir -p /home/yourname/skywalking && cd /home/yourname/skywalking
2. 编写 docker-compose.yml
在 skywalking 目录下新建 docker-compose.yml 文件,内容如下:
version: '3'
services:
skywalking-oap:
image: apache/skywalking-oap-server:9.7.0
container_name: skywalking-oap
restart: always
ports:
- "11800:11800" # gRPC
- "12800:12800" # HTTP
environment:
- SW_STORAGE=elasticsearch7
- SW_ES_USER=elastic
- SW_ES_PASSWORD=your_es_password # 根据实际替换
volumes:
- ./oap-data:/skywalking/data # 持久化数据
networks:
- skywalking
skywalking-ui:
image: apache/skywalking-ui:9.7.0
container_name: skywalking-ui
restart: always
ports:
- "8080:8080"
environment:
- SW_OAP_ADDRESS=http://skywalking-oap:12800
depends_on:
- skywalking-oap
networks:
- skywalking
networks:
skywalking:
driver: bridge
注意:本例存储后端使用 Elasticsearch 7,需要提前准备一个 ES 实例(或者改成 H2 内嵌模式用于测试,但生产不推荐)。如果你没有 ES,可以把SW_STORAGE改为h2,并在skywalking-oap的environment中去掉 ES 相关变量,同时挂载./oap-data用于 H2 持久化。
3. 启动服务
在 skywalking 目录下执行:
docker compose up -d
等待几分钟,查看容器状态:
docker compose ps
如果两个容器状态都是 Up,说明启动成功。
验证链路追踪是否生效
1. 访问 SkyWalking UI
打开浏览器,输入 http://你的主机IP:8080,如果看到 SkyWalking 的仪表盘,说明 UI 正常工作。
2. 配置一个简单的 Java 应用上报数据
下载一个 Spring Boot 示例 JAR,或者自己写一个。
然后在启动时加入 SkyWalking Java Agent 参数。
假设你的 agent 包已经解压到 /home/yourname/skywalking-agent,启动命令如下:
java -javaagent:/home/yourname/skywalking-agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=my-test-service \
-Dskywalking.collector.backend_service=你的主机IP:11800 \
-jar my-app.jar
注意:collector.backend_service 的 IP 填写你家用主机的局域网 IP(例如 192.168.1.100),端口是 OAP 的 gRPC 端口 11800。
3. 触发请求并查看链路
访问应用的某个接口(比如 /api/hello),稍等几秒后回到 SkyWalking UI,在“拓扑图”或“追踪”页面应该能看到 my-test-service 的调用链信息。
高频问题与避坑说明
Q:OAP 容器启动失败,日志报“No storage provider found”
原因:存储后端配置不正确。
如果你没有 Elasticsearch,请改用 H2 测试模式:将环境变量 SW_STORAGE 改为 h2,并移除 SW_ES_USER 等 ES 相关变量。
同时给 OAP 挂载数据卷 ./oap-data:/skywalking/data 保证重启不丢数据。
Q:UI 能打开但看不到任何数据
- 确认 Agent 的
collector.backend_service指向的是家用主机的局域网 IP,而不是localhost。因为容器内部与 Agent 不在同一网络命名空间。 - 检查家用主机的防火墙是否放通了 11800 端口(gRPC)。
- 等待约 10 秒,让 OAP 完成数据处理流程。
Q:家用主机重启后 SkyWalking 数据丢失
避坑方法:在 docker-compose.yml 中已经为 OAP 挂载了 ./oap-data:/skywalking/data 卷(H2 模式)或者确保 Elasticsearch 数据持久化。
如果使用 ES,也请为 ES 容器配置持久化卷。
Q:端口被占用或路由器映射问题
家用主机通常通过路由器上网,如果希望外网访问 UI,需要在路由器上做端口映射(不推荐暴露管理界面向公网)。
建议仅在内网使用。
总结
通过以上步骤,你已经在家里的一台 Linux 主机上成功运行了 SkyWalking 链路追踪系统。
你可以将线上微服务或实验项目的 Agent 指向这台机器,就能免费获得一套分布式的调用链监控。
后续如果需要调整存储(比如改用 ES 集群),只需修改 docker-compose.yml 的环境变量并重启即可。
如果你在实际操作中遇到其他问题,欢迎在评论区留言,我会把常见报错更新到 FAQ 部分。