分布式链路追踪系统之二进制安装skywalking

分布式链路追踪系统之二进制安装skywalking

一、分布式链路追踪基础概念在微服务架构中,一个用户请求可能经过多个服务节点,形成一条复杂的调用链路。当系统出现性能瓶颈或故障时,传统的日志监控方式难以快速定位问题根源。分布式链路追踪技术应运而生,它通过记录请求在分布式系统中的完整调用路径,帮助开发者理解服务依赖关系、分析性能瓶颈。SkyWalking 是 Apache 基金会下的分布式链路追踪系统,支持多种语言(Java、Python、Node.js 等)的自动探针注入,具有低侵入性、高性能的特点。其核心组件包括:- OAP(Observability Analysis Platform) :负责接收和处理追踪数据- UI(User Interface) :提供可视化界面展示链路拓扑和性能指标- Agent :部署在应用服务中,负责采集追踪数据## 二、二进制安装SkyWalking的准备工作### 2.1 环境要求- 操作系统:Linux(推荐CentOS 7+)或 macOS- JDK版本:JDK 8+(OAP和UI依赖Java运行环境)- 磁盘空间:至少2GB用于存储索引数据- 内存:推荐4GB以上(OAP默认使用1GB堆内存)### 2.2 下载二进制包访问SkyWalking官网下载页面(https://skywalking.apache.org/downloads/),选择最新稳定版本(如v9.4.0)。下载命令示例:`bash# 下载Linux版本wget https://dlcdn.apache.org/skywalking/9.4.0/apache-skywalking-apm-9.4.0.tar.gz# 解压tar -zxvf apache-skywalking-apm-9.4.0.tar.gzcd apache-skywalking-apm-bin解压后的目录结构如下:├── bin/ # 启动脚本├── config/ # 配置文件├── oap-libs/ # OAP依赖库├── webapp/ # UI应用└── agent/ # Java探针## 三、配置OAP和UI组件### 3.1 修改OAP配置SkyWalking默认使用H2内存数据库存储数据,生产环境建议切换到Elasticsearch。编辑config/application.yml文件:yaml# 选择存储方式:h2(默认)、elasticsearch、mysql等storage: selector: {SW_STORAGE:elasticsearch} # 修改为elasticsearch# Elasticsearch配置(需提前安装ES 7.x)elasticsearch: clusterNodes: {SW_STORAGE_ES_CLUSTER_NODES:localhost:9200} namespace: {SW_NAMESPACE:""}`### 3.2 修改UI配置UI组件的配置文件位于`webapp/webapp.yml`,主要设置OAP服务地址:`yamlserver: port: 8080 # UI访问端口collector: path: /graphql ribbon: listOfServers: 127.0.0.1:12800 # OAP服务地址`## 四、启动SkyWalking服务### 4.1 启动OAP服务在`bin`目录下执行启动脚本(需要Java环境):`bash# 启动OAP(后台运行)./bin/oapService.sh start# 查看日志tail -f logs/skywalking-oap-server.log`成功启动后,日志显示:`SkyWalking OAP started successfully.`### 4.2 启动UI服务`bash./bin/webappService.sh start`访问`http://localhost:8080`,如果看到SkyWalking UI界面,说明安装成功。## 五、集成Java探针(Agent)### 5.1 配置探针参数SkyWalking Agent通过Java Agent机制注入,无需修改业务代码。编辑`agent/config/agent.config`文件:`properties# 指定服务名称agent.service_name={SW_AGENT_NAME:my-java-app}# 指向OAP地址collector.backend_service={SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}`### 5.2 启动Java应用时注入探针假设有一个Spring Boot应用,启动命令如下:`bashjava -javaagent:/path/to/skywalking-agent/skywalking-agent.jar \ -Dskywalking.agent.service_name=order-service \ -jar order-service.jar`## 六、代码示例:模拟分布式调用### 示例1:Python微服务接入SkyWalking通过SkyWalking Python SDK实现自动追踪。首先安装SDK:`bashpip install apache-skywalking`创建两个微服务:`service-a`和`service-b`,模拟调用链:```````python# service_a.pyfrom skywalking import agent, configfrom flask import Flaskimport requests# 配置SkyWalking Agentconfig.init(collector='127.0.0.1:11800', service_name='service-a')agent.start()app = Flask(__name__)@app.route('/api/order')def create_order(): """创建订单,调用service-b""" # 此处会自动生成追踪span response = requests.get('http://localhost:5001/api/inventory') return {'status': 'order created', 'inventory': response.json()}if __name__ == '__main__': app.run(port=5000)``````python# service_b.pyfrom skywalking import agent, configfrom flask import Flaskconfig.init(collector='127.0.0.1:11800', service_name='service-b')agent.start()app = Flask(__name__)@app.route('/api/inventory')def check_inventory(): """检查库存""" # SkyWalking自动记录该请求的追踪信息 return {'available': 100}if __name__ == '__main__': app.run(port=5001)```````### 示例2:手动创建自定义追踪Span在某些场景下,我们需要手动标记业务逻辑中的关键节点。以下示例展示如何创建自定义Span:`python# custom_trace.pyfrom skywalking import agent, configfrom skywalking.trace import tagsfrom skywalking.trace.context import get_contextconfig.init(collector='127.0.0.1:11800', service_name='custom-app')agent.start()def process_payment(order_id): """处理支付业务,手动创建追踪Span""" context = get_context() # 创建自定义Span,标记支付处理阶段 with context.new_entry_span('process_payment') as span: span.tag(tags.TAG_KEY_HTTP_METHOD, 'POST') span.tag(tags.TAG_KEY_OPERATION, 'payment') span.log(event='payment_start', timestamp=1234567890) # 模拟业务逻辑 import time time.sleep(0.5) # 记录异常示例 if order_id == 0: span.error_occurred = True span.log(event='payment_failed', error='Invalid order') return False span.log(event='payment_success', amount=100.0) return True# 测试调用if __name__ == '__main__': process_payment(1001)`## 七、验证链路追踪效果1. 启动两个Python服务:`bashpython service_a.py &python service_b.py &`2. 访问Service-A的接口:`curl http://localhost:5000/api/order`3. 登录SkyWalking UI(http://localhost:8080),在"Trace"模块中可以看到调用链路: `service-a -> service-b ` 点击具体链路,可查看每个节点的耗时、状态码和自定义标签信息。## 八、高级配置与优化### 8.1 使用Elasticsearch存储生产环境建议用Elasticsearch替代默认的H2数据库:`yaml# config/application.ymlstorage: selector: elasticsearch elasticsearch: clusterNodes: localhost:9200 indexShardsNumber: 3 indexReplicasNumber: 1`### 8.2 调整采样率默认采样率是100%,对于高并发系统可降低采样率:`properties# agent/config/agent.configagent.sample_n_per_3_secs={SW_AGENT_SAMPLE:10} # 每3秒采样10次### 8.3 集成告警机制SkyWalking支持基于规则的告警,在config/alarm-settings.yml中配置:yamlrules: - rule_name: service_sla_rule metric_name: service_sla op: < threshold: 80 period: 10 count: 3 message: 服务SLA低于80%已持续30秒`## 总结本文从分布式链路追踪的核心概念出发,详细介绍了SkyWalking的二进制安装全流程。通过实际代码示例,展示了如何将Python应用接入SkyWalking,并手动创建自定义追踪Span。SkyWalking作为功能完备的APM系统,其二进制安装方式虽然需要手动配置,但具有灵活性强、资源占用可控的优势。建议生产环境配合Elasticsearch使用,并合理配置采样率和告警规则。掌握SkyWalking的安装与使用,能显著提升微服务架构下的问题定位效率。

相关推荐
心念枕惊4 小时前
分布式、服务化的ERP系统架构设计
分布式·系统架构
重庆小透明5 小时前
分布式事务方案对比
分布式
帅喵1 天前
Linux 部署 BanyanDB 0.10.3 生产单机模式对接SkyWalking OAP
skywalking·banyandb
向夏威夷 梦断明暄1 天前
从架构特点到功能缺陷,重新认识分析型分布式数据库
数据库·分布式·架构
AAA@峥1 天前
Ceph 集群配置管理完整指南
运维·数据库·分布式·ceph
心如鉄补1 天前
分布式链路追踪系统之docker-compose安装skywalking
分布式·docker·skywalking
努力努力再努力wz1 天前
【分布式系统与 RPC 框架系列】从单机瓶颈到远程调用:一文理解分布式架构与 RPC 原理
linux·网络·c++·分布式·网络协议·rpc·架构
ACP广源盛139246256731 天前
此芯 P1 AI BOX / AI NAS@ACP#IX8008、IX8024 应用场景与市场机会
大数据·人工智能·分布式·单片机·嵌入式硬件
Linux-18742 天前
分布式链路追踪系统之skywalking java agent 的使用、skywalking web界面简介
云原生·skywalking·分布式链路追踪系统·应用程序性能监控·halo博客系统·skywalking java agent·skywalking web 简介