分布式链路追踪系统之docker-compose安装skywalking

分布式链路追踪系统之docker-compose安装skywalking

在微服务架构中,分布式链路追踪是排查性能瓶颈和错误定位的核心工具。SkyWalking 作为 Apache 基金会旗下的开源 APM 系统,以其轻量级、高性能和丰富的生态支持,成为众多团队的首选。本文将从实战角度出发,演示如何使用 docker-compose 快速搭建 SkyWalking 环境,并集成一个简单的 Python 服务进行链路追踪。## 为什么选择 docker-compose 部署 SkyWalking?在生产环境中,SkyWalking 通常需要部署多个组件(如 OAP 服务器、UI 面板、存储后端)。使用 docker-compose 可以:- 一键启动 所有组件,避免手动配置依赖关系- 环境隔离 ,每个组件运行在独立容器中- 快速扩展 ,通过修改 YAML 文件即可调整资源或组件版本## 环境准备确保你的系统已安装以下软件:- Docker (20.10+)- Docker Compose (v2+)可以通过以下命令验证:bashdocker --versiondocker compose version## 第一步:编写 docker-compose.yml 文件首先创建项目目录:bashmkdir skywalking-docker && cd skywalking-docker然后创建 docker-compose.yml 文件,内容如下:yamlversion: '3.8'services: # Elasticsearch 作为存储后端 elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.10 container_name: skywalking-es environment: - discovery.type=single-node # 单节点模式,适合开发测试 - ES_JAVA_OPTS=-Xms1g -Xmx1g # JVM 堆内存限制 - xpack.security.enabled=false # 禁用安全认证 ports: - "9200:9200" networks: - skywalking volumes: - es_data:/usr/share/elasticsearch/data # 持久化数据 # SkyWalking OAP 服务(负责数据收集与存储) oap: image: apache/skywalking-oap-server:9.6.0 container_name: skywalking-oap depends_on: - elasticsearch environment: - SW_STORAGE=elasticsearch # 使用 ES 作为存储 - SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 - SW_HEALTH_CHECKER=default - SW_TELEMETRY=prometheus # 启用 Prometheus 指标 ports: - "12800:12800" # gRPC 端口,用于接收 Agent 数据 - "11800:11800" # HTTP 端口,用于接收 HTTP 上报 networks: - skywalking restart: always # SkyWalking UI 面板 ui: image: apache/skywalking-ui:9.6.0 container_name: skywalking-ui depends_on: - oap environment: - SW_OAP_ADDRESS=oap:12800 # 连接 OAP 的 gRPC 地址 ports: - "8080:8080" # Web 界面端口 networks: - skywalking restart: alwaysnetworks: skywalking: driver: bridgevolumes: es_data: driver: local### 配置说明- Elasticsearch :作为 SkyWalking 的默认存储后端,版本需与 OAP 兼容(这里使用 7.17.10)。- OAP 服务 :核心分析引擎,通过环境变量 SW_STORAGE 指定存储类型。- UI 面板 :提供可视化界面,通过 SW_OAP_ADDRESS 连接 OAP。- 网络与卷 :所有服务通过 skywalking 网络通信,ES 数据持久化到本地卷。## 第二步:启动服务在项目目录下执行:bashdocker compose up -d第一次启动会自动拉取镜像,等待 1-2 分钟。检查服务状态:bashdocker compose ps输出应显示三个服务均为 Up 状态。访问 http://localhost:8080 即可看到 SkyWalking UI 界面。## 第三步:集成 Python 服务进行链路追踪为了验证链路追踪效果,我们创建一个 Python 服务,并使用 SkyWalking Python Agent 进行自动埋点。首先编写一个简单的 Flask 应用:python# app.pyfrom flask import Flaskimport timeimport random# 导入 SkyWalking Python Agentfrom skywalking import agent, config# 配置 Agent 参数config.init( agent_collector_backend_services='127.0.0.1:11800', # OAP HTTP 地址 agent_service_name='python-flask-service', # 服务名称 agent_instance_name='instance-1', # 实例名称 agent_log_level='DEBUG' # 调试日志级别)app = Flask(__name__)@app.route('/api/hello')def hello(): """简单的 GET 接口,模拟业务逻辑""" time.sleep(0.1) # 模拟耗时操作 return {'message': 'Hello from SkyWalking!'}@app.route('/api/process')def process(): """模拟复杂处理流程""" # 模拟数据库查询 time.sleep(0.2) # 模拟外部调用 if random.random() > 0.5: time.sleep(0.3) # 模拟业务计算 result = sum(range(1000)) return {'result': result, 'status': 'success'}if __name__ == '__main__': # 启动 Flask 应用并自动接入 SkyWalking agent.start() app.run(host='0.0.0.0', port=5000)### 安装依赖并运行创建 requirements.txt 文件:flask==3.0.0apache-skywalking==0.9.0安装依赖并启动服务:bashpip install -r requirements.txtpython app.py注意:这里假设 Python 应用与 SkyWalking OAP 在同一台机器上运行(通过 127.0.0.1:11800 通信)。如果不在同一网络,需要替换为 OAP 的实际 IP 地址。## 第四步:生成测试流量并查看链路打开另一个终端,使用 curl 发送请求:bash# 发送简单的请求curl http://localhost:5000/api/hello# 发送处理请求(多次执行以生成更多链路)for i in {1..10}; do curl http://localhost:5000/api/process sleep 0.5done然后访问 SkyWalking UI(http://localhost:8080),在左侧菜单选择 服务 ,即可看到 python-flask-service 已经注册。点击进入后可以查看:- 拓扑图 :展示服务间的调用关系- 追踪列表 :显示每个请求的完整链路耗时- 指标 :包括响应时间、吞吐量、错误率等## 常见问题与优化### 1. Agent 无法连接 OAP检查 agent_collector_backend_services 地址是否正确。如果使用 Docker 网络,Python 应用需要连接 host.docker.internal(Windows/Mac)或宿主机 IP(Linux)。### 2. Elasticsearch 内存占用过高在 docker-compose.yml 中调整 ES_JAVA_OPTS-Xms-Xmx 值,例如改为 -Xms512m -Xmx512m。### 3. 数据清理策略SkyWalking 默认保留 7 天数据。如需调整,在 OAP 环境变量中添加:SW_CORE_GRPC_MAX_MESSAGE_SIZE=10MSW_STORAGE_ES_INDEX_TTL_DAYS=3 # 保留 3 天## 总结通过本文的实战演示,我们成功使用 docker-compose 部署了 SkyWalking 的完整环境(Elasticsearch + OAP + UI),并集成了一个 Python Flask 应用进行链路追踪。整个过程只需要一个 YAML 文件和一个 Python 脚本,充分体现了容器化部署的便捷性。核心要点回顾:1. 组件依赖 :OAP 需要先于 UI 启动,ES 需要先于 OAP 启动,通过 depends_on 控制顺序。2. 网络配置 :所有服务使用同一个 Docker 网络,确保容器间通信正常。3. Agent 集成 :Python 应用只需几行代码即可完成自动埋点,零侵入性。4. 可视化效果:SkyWalking UI 提供了拓扑图、追踪详情、性能指标等丰富功能。在实际生产环境中,建议使用更稳定的存储后端(如 Elasticsearch 集群)并配置健康检查。此外,SkyWalking 还支持 Java、Go、Node.js 等多种语言的 Agent,可轻松扩展到全栈链路追踪。希望本文能帮助你快速上手 SkyWalking,为微服务监控打下坚实基础。

相关推荐
努力努力再努力wz1 小时前
【分布式系统与 RPC 框架系列】从单机瓶颈到远程调用:一文理解分布式架构与 RPC 原理
linux·网络·c++·分布式·网络协议·rpc·架构
ACP广源盛139246256733 小时前
此芯 P1 AI BOX / AI NAS@ACP#IX8008、IX8024 应用场景与市场机会
大数据·人工智能·分布式·单片机·嵌入式硬件
冰封之寂12 小时前
Docker 资源管理终极指南:CPU、内存与 IO 的精细化控制
linux·运维·服务器·docker·云计算
Linux-187412 小时前
分布式链路追踪系统之skywalking java agent 的使用、skywalking web界面简介
云原生·skywalking·分布式链路追踪系统·应用程序性能监控·halo博客系统·skywalking java agent·skywalking web 简介
9523614 小时前
Docker - 基础
运维·后端·docker·容器
Code_Ignis14 小时前
docker国内可用源(持续维护)
运维·docker·容器
水中加点糖20 小时前
Java中使用远程PlayWright进行网页接口测试(附Docker部署方式)
java·docker·web测试·devtools·playwright·ai自动化测试
网络工程小王21 小时前
【HCIE-AI】12.deepspeed分布式并行训练进阶版
人工智能·pytorch·分布式·学习·昇腾·deepspeed
梦梦代码精1 天前
PHP 还是 Java?LikeShop 多版本对比,附6条落地避坑建议
低代码·docker·开源·代码规范