SkyWalking-1--SkyWalking是什么?
Apache SkyWalking是一个开源的应用性能监控(APM)和可观测性分析平台(Observability Platform),专为云原生和微服务架构设计。集分布式追踪、服务网格监控、度量聚合、日志收集、可视化、告警等功能于一体。它帮助开发者和运维团队实时掌握系统的运行状态,快速定位问题根源,优化性能,并提供业务洞察。
1、核心功能
1、分布式追踪(Distributed Tracing)
- 端到端追踪:为每个请求生成唯一的Trace ID,记录请求在微服务间的流转路径和耗时,形成完整的调用链(Call Chain)。
- 调用链分析:通过Span(调用片段)记录每个服务的处理时间、调用关系和错误信息,帮助识别性能瓶颈。
- 示例场景:在电商系统中,用户下单请求经过订单服务、用户服务、库存服务、支付服务等,SkyWalking可以清晰展示每个服务的耗时及调用顺序。
2、性能监控(APM)
- 实时指标采集:监控服务的响应时间、吞吐量、错误率、CPU/内存使用率等关键指标。
- 服务依赖分析:通过拓扑图展示服务间的依赖关系,识别关键服务和潜在故障点。
- 多维度分析:支持按服务、实例、端点(Endpoint)等维度分析性能数据。
3、服务网格监控
- Istio/Envoy集成:捕获服务网格中的通信细节(如请求延迟、流量分布、错误率),帮助理解微服务间的交互行为。
- Sidecar模式支持:通过Sidecar代理(如Envoy)采集遥测数据,无需修改业务代码。
4、日志管理
- 日志聚合:收集和分析分布式系统中的日志数据,支持日志格式化、字段提取、关联追踪(Trace ID)。
- 高性能采样:支持多种日志采样策略,减少存储和计算开销。
- 与追踪联动:在日志中关联Trace ID,可直接跳转到对应的调用链路分析页面。
5、度量聚合与告警
- 多数据源支持:聚合SkyWalking自身指标、OpenTelemetry、Prometheus、Zabbix等第三方指标。如响应时间、吞吐量、成功率等。
- 灵活告警规则:基于自定义阈值(如响应时间> 1s、错误率> 5%)触发告警,支持邮件、钉钉、Webhook等通知方式。
- 告警收敛:支持告警分组、抑制规则,避免告警风暴。
6、可视化仪表盘
- 拓扑图:实时展示服务依赖关系和流量分布。
- 调用链追踪:通过时间轴展示请求的完整生命周期。
- 性能图表:以图表形式展示响应时间、吞吐量、错误率等指标。
- 自定义视图:支持按业务需求定制仪表盘,方便不同团队聚焦关键指标。
2、架构设计
SkyWalking的架构分为四层,模块化设计使其灵活可扩展。
架构示例图:
1、Agent(探针)
- 功能:注入到应用中,采集链路数据(Trace、Metrics、Logs)。
- 支持语言:Java、Go、Python、Node.js、.NET Core、PHP、C++等。
- 无侵入性:通过Java Agent技术实现无代码修改的监控,适用于Spring Cloud、Dubbo、gRPC等主流框架。
2、OAP Server(后端服务)
- 核心功能:
- 数据分析:接收Agent发送的数据,进行聚合、分析。
- 存储:将数据写入后端存储(如Elasticsearch、MySQL、H2、TiDB、BanyanDB)。
- 查询服务:提供REST/gRPC接口供UI查询数据。
- 模块化设计:支持插件化扩展(如新增数据源、告警渠道)。
3、Storage(存储层)
- 支持类型:
- Elasticsearch:适合高吞吐量和复杂查询场景。
- MySQL/H2:轻量级部署,适合开发和测试环境。
- BanyanDB:SkyWalking自研的时序数据库,专为遥测数据优化。
- TiDB:支持水平扩展的分布式数据库。
4、UI(前端展示)
- 功能:
- 提供Web界面,展示拓扑图、调用链、性能指标。
- 支持自定义仪表盘、告警规则配置。
- 默认端口:8080,登录账号admin/admin。
示例UI图:
拓扑图:
链路追踪图:
指标面板图:
3、核心优势
1、多语言支持
- 支持Java、Go、Python、Node.js等主流语言的自动探针,覆盖云原生全栈。
2、轻量高效
- 无需依赖大数据平台(如Hadoop),资源消耗低,适合中小规模部署。
3、模块化架构
- 各组件(Agent、OAP、Storage、UI)可独立部署和扩展。
4、云原生友好
- 支持Kubernetes、Docker、Istio等云原生技术,提供服务网格监控。
5、扩展性强
- 支持OpenTelemetry、Prometheus等标准协议,可与现有监控系统集成。
6、自研数据库BanyanDB
- 专为遥测数据设计,支持高吞吐写入和高效查询。
4、典型使用场景
1、微服务调用链追踪
- 快速定位请求延迟或失败的根本原因(如某个服务响应超时)。
- 示例:用户登录请求经过认证服务、用户服务、数据库,SkyWalking可显示每个环节的耗时。
2、性能瓶颈分析
- 通过对服务调用链的分析,识别出性能瓶颈所在的服务或接口。同时可通过拓扑图和指标图表,识别高负载服务或资源瓶颈(如数据库慢查询)。
3、服务依赖分析
- 可视化服务间依赖关系,发现循环依赖或单点故障风险。
4、日志与追踪联动
- 在日志中点击Trace ID,直接跳转到对应的调用链分析页面。
5、告警与故障响应
- 设置告警规则(如服务错误率>5%),通过钉钉或邮件通知运维团队。
6、云原生监控
- 监控Kubernetes集群中的容器状态、Pod资源使用情况。
5、部署与使用
1、单机部署
步骤:
(1)、安装Elasticsearch(可选,用于存储数据)。
(2)、下载SkyWalking
从官网获取安装包。
(3)、配置
- 修改application.yml配置存储类型(如storage: elasticsearch)。
- 修改webapp.yml配置前端端口。
(4)、启动服务
Bash示例:
# 启动SkyWalking OAP和Web UI
/path/to/skywalking/bin/startup.sh
(5)、访问UI:浏览器打开http://localhost:8080,默认账号admin/admin。
2、微服务集成
- Java应用:
- 将SkyWalking Agent挂载到JVM启动参数:
Bash示例:
- 将SkyWalking Agent挂载到JVM启动参数:
java -javaagent:/path/to/skywalking-agent.jar -Dskywalking.agent.service_name=order-service -jar order-service.jar
- 非Java应用:
- 使用OpenTelemetry或SkyWalking提供的SDK(如Go、Python客户端)。
6、与其他工具对比
7、最佳实践
1、生产环境部署
- 使用Elasticsearch作为存储,确保高可用和扩展性。
- 配置告警规则,监控关键服务的延迟和错误率。
2、性能优化
- 通过调用链分析,优化慢SQL、第三方接口调用。
- 使用拓扑图识别服务依赖瓶颈,减少不必要的调用。
3、日志与追踪联动
- 在日志中记录Trace ID,实现日志与链路追踪的无缝衔接。
4、持续集成
- 在CI/CD流程中集成SkyWalking,监控新版本发布后的性能变化。
8、总结
Apache SkyWalking是云原生时代不可或缺的观测性工具,通过分布式追踪、性能监控、日志管理、告警等功能,帮助团队全面掌控微服务和云原生系统的运行状态。其多语言支持、轻量高效、模块化设计和自研数据库BanyanDB使其在同类工具中脱颖而出。无论是中小规模的微服务架构,还是大规模云原生集群,SkyWalking都能提供高效的监控和诊断能力。
向阳前行,Dare To Be!!!