自从用上SkyWalking后,睡觉都踏实了

2023-08-10 09:22:21 浏览数 (2)

首先我们先介绍下SkyWalking是什么,然后再聊聊它是用来解决什么问题的。

随着微服务架构的流行,系统的复杂性与运维难度大大增加。如何实时监控系统的运行状态,快速定位性能瓶颈,已成为一个不可回避的问题。SkyWalking正是在这样的背景下诞生的一个全新的开源APM(Application Performance Management)系统。本文将详细介绍SkyWalking的技术原理、应用场景、快速入门等,以帮助读者全面了解这个强大的分布式跟踪、应用监控平台。

一、SkyWalking简介

SkyWalking是一款采用Java语言开发的分布式应用性能监控系统,支持跟踪、监控和诊断分布式系统,特别是以微服务架构和云原生应用为代表的新一代大规模分布式系统。它提供了实时应用拓扑分析、应用性能指标监控、调用链路追踪、慢服务检测、性能优化建议等功能。

相比其他APM工具,SkyWalking具有以下显著优势:

  1. 真正无侵入,不需要修改应用程序源码,通过探针收集数据
  2. 支持主流开源技术栈,Java、.Net Core、Node.js、Go等语言都有探针
  3. 高效存储设计,时间和空间效率优异
  4. 现代化UI,多维度分析链路和性能
  5. 极简部署,提供全托管云平台
  6. 开源免费,社区活跃

二、它用来解决什么问题?

SkyWalking作为新一代APM系统,主要解决了以下几方面的问题:

  1. 分布式系统监控难题

在复杂的分布式系统中,调用链路蔓延多个服务,难以跟踪。SkyWalking提供了全链路追踪能力,可以清晰还原整个调用流程。

  1. 应用性能监控不足

很多系统对性能指标的监控不够全面和深入。SkyWalking可以从多个维度监控应用性能,找到瓶颈。

  1. 故障定位时间长

系统发生问题后,通过日志难以定位根因。而SkyWalking的追踪信息可以快速定位故障服务。

  1. 依赖关系复杂度高

微服务系统中间依赖关系错综复杂。SkyWalking提供服务拓扑 map,一目了然。

  1. 监控成本高

许多APM工具需要PAYLOAD接入,增加额外开销。SkyWalking使用无侵入式探针,减少系统侵入。

  1. 技术栈限制严重

旧监控系统只支持少数语言。SkyWalking提供Java、.NET等主流语言的探针。

  1. 监控视图单一

较老的APM系统UI功能简陋。SkyWalking提供丰富的时序图、拓扑图等可视化监控视图。

  1. 云原生支持不足

早期APM系统不支持新型微服务技术栈。SkyWalking在云原生支持上做了大量优化。

总之,SkyWalking作为新一代解决方案,很好地解决了传统APM系统在分布式链路跟踪和应用监控等方面的痛点,值得推荐使用。

三、SkyWalking架构设计

SkyWalking采用典型的分层架构设计,主要包含探针、平台后端和UI显示三个部分,层层收集数据、聚合处理、最后用视图呈现,整体架构如下图所示:

  1. 探针

探针 binaries 安装在服务端,通过采样或者嵌入钩子的方式,无侵入地收集请求链路、性能指标、请求内容等数据,然后发送到SkyWalking后端。

目前支持的语言栈:Java、.Net Core、Node.JS、Go等主流技术。

  1. 平台后端

主要包括 Collector、Storage、Query、Alarm等模块。

  • Collector:数据收集模块,将探针上报的数据进行缓存和聚合,然后存入存储。
  • Storage:存储模块,默认使用ElasticSearch作为存储引擎,所有监控数据会存入其中。
  • Query:查询模块,提供类SQL查询语言,用来从存储中查询数据。
  • Alarm:告警模块,提供实时告警能力。
  1. UI显示

SkyWalking UI实现了服务拓扑关系展示、调用链路的步步阐释、性能指标的监控排行等功能,提供了非常强大的可视化控制台。

四、SkyWalking的应用场景

SkyWalking提供了应用性能监控与链路追踪的全套功能,适用于多种场景:

  1. 分布式系统监控

SkyWalking可以查看全局系统的拓扑关系和调用链路,支持多种监控指标,可以作为微服务架构和云原生环境下的基础监控平台。

  1. 应用性能优化

通过SkyWalking统计的慢服务、慢SQL、调用次数等数据指标,可以快速定位系统性能瓶颈。

  1. 故障根因分析

当系统发生故障时,可以通过SkyWalking查看链路数据,分析故障原因,提高故障排查效率。

  1. 容量规划

SkyWalking的监控数据可以反映应用的负载情况,为系统容量评估、规划提供依据。

五、SkyWalking快速入门

下面以一个简单的微服务 demo 为例,快速演示 SkyWalking 的使用流程。

  1. 准备工作
  • SkyWalking后端:下载安装包,直接启动即可运行。
  • UI:访问后端webapp路径
  • 探针:按需为语言添加探针库依赖
  1. 部署Demo服务
  • provider-demo:Provider 服务,使用 REST 提供数据API
  • consumer-demo:Consumer 服务,使用 Feign 调用 Provider API
  1. 运行服务 & 访问
  • 启动 Provider 和 Consumer 服务
  • 访问Consumer触发调用链路
  • SkyWalking UI 会收到数据并呈现
  1. 分析监控

SkyWalking UI 可以看到应用拓扑关系、服务指标、调用链路等全方位监控视角,例如:

  • 拓扑图:自动发现应用之间的拓扑关系
  • 追踪:查看某一次链路调用的全链路细节
  • 告警:设置异常请求数、响应时间阈值的告警规则
  • ...

六、SkyWalking的技术原理

SkyWalking作为新一代分布式链路追踪和应用监控平台,其核心技术原理可概括为以下几点:

  1. 探针无侵入自动埋点

不同语言的探针,采用字节码注入等手段,无需改应用源码,自动实现埋点。

  1. 轻量高效网络传输协议

探针与 Collector 之间的数据传输,使用专门定制的网络协议,高效轻量并支持服务端采样。

  1. 流式处理和存储技术

Collector 以流式方式处理数据,不做批处理。存储后端可以配置 Elasticsearch 等提供高吞吐写入能力。

  1. 分布式链路ID关联 chase

通过 TraceId、SegmentId 等全局 propagandaID,可将分布式调用链路高效关联。

  1. 显式的时间戳标记

精确到毫秒级的时间戳标记,用于准确计算调用时延和追踪链路。

七、总结

SkyWalking作为新生代的开源APM系统,具有现代化的技术架构、出色的性能表现、灵活的可扩展能力以及友好的 UI 界面。它的出现解决了许多大型分布式系统面临的监控痛点,提供了可靠的性能监控和故障诊断手段。

随着SkyWalking社区的蓬勃发展,其应用场景也在不断扩大,值得关注并投入使用。如果读者的公司也面临分布式系统监控的需求,不妨考虑试用SkyWalking,它能够有效提高系统的稳定性与运维效率。

0 人点赞