分布式请求跟踪系统:skywalking

2019-10-01 23:02发布

总览

SkyWalking:一个开源的观测平台, 用于从服务和云原生基础设施收集, 分析, 聚合以及可视化数据. SkyWalking 为你提供了一种简便的方式来清晰地观测分布式系统, 甚至可以观测横跨不同云的系统. SkyWalking 更是一种现代的应用程序性能监控(Application Performance Monitoring)工具, 尤其是专为云原生, 基于容器以及分布式的系统.

架构

SkyWalking 逻辑上分为四部分: 探针, 平台后端, 存储和用户界面.

  • 探针基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式.
  • 平台后端是一个支持集群模式运行的后台, 用于数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程. 平台后端还提供了各种可插拔的能力, 如不同来源数据(如来自 Zipkin)格式化, 不同存储系统以及集群管理. 你甚至还可以使用观测分析语言来进行自定义聚合分析.
  • 存储是开放式的. 你可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere 管理), 也可以选择自己实现一个存储系统. 当然, 我们非常欢迎你贡献新的存储系统实现.
  • 用户界面对于 SkyWalking 的最终用户来说非常炫酷且强大. 同样它也是可定制以匹配你已存在的后端的.

java项目接入skywalking

只需在项目目录下增加skywalking目录,然后再启动参数中增加jvm参数即可:

-javaagent:/path/to/skywalking-agent/skywalking-agent.jar

同时,我们也可以修改config文件夹中agent.config的相关配置

Skywalking也提供了其他的一些特性:

  • 配置重载:支持通过jvm参数覆写默认配置,支持动态配置管理
  • 集群管理:这个主要体现在OAP,通过集群部署分担数据上报的流量压力和二次计算的计算压力,同时集群也可以通过配置切换角色,分别面向数据采集(collector)和计算(aggregator,alarm),需要注意的是agent目前不支持多collector负载均衡,而是随机从集群中选择一个实例进行数据上报
  • 支持k8s和mesh
  • 支持数据容器的扩展,例如官方主推是ES,通过扩展接口,也可以实现插件去支持其他的数据容器
  • 支持数据上报receiver的扩展,例如目前主要是支持gRPC接受agent的上报,但是也可以实现插件支持其他类型的数据上报(官方默认实现了对Zipkin,telemetry和envoy的支持)
  • 支持客户端采样和服务端采样,不过服务端采样最有意义
  • 官方制定了一个数据查询脚本规范:OAL(Observability Analysis Language),语法类似Linq,以简化数据查询扩展的工作量
  • 支持监控预警,通过OAL获取数据指标和阈值进行对比来触发告警,支持webhook扩展告警方式,支持统计周期的自定义,以及告警静默防止重复告警

下一步设计目标

  • 保持可观测性. 不管目标系统如何部署, SkyWalking 总要提供一种方案或集成方式来保持对目标系统的观测, 基于此, SkyWalking 提供了数种运行时探针.
  • 拓扑结构, 性能指标和追踪一体化. 理解分布式系统的第一步是通过观察其拓扑结构图. 拓扑图可以将复杂的 系统在一张简单的图里面进行可视化展现. 运维支撑系统相关人员需要更多关于服务/实例/端点/调用的性能指标. 链路追踪(trace)作为详细的日志, 对于此种性能指标来说很有意义, 如你想知道什么时候端点延时变得很长, 想了解最慢的链路并找出原因. 因此你可以看到, 这些需求都是从大局到细节的, 都缺一不可. SkyWalking 集成 并提供了一系列特性来使得这些需求成为可能, 并且使之易于理解.
  • 轻量级. 有两个方面需要保持轻量级. (1) 探针, 我们通常依赖于网络传输框架, 如 gRPC. 在这种情况下, 探针就应该尽可能小, 防止依赖库冲突以及虚拟机的负载压力(主要是 JVM 永久代内存占用压力). (2) 作为一个 观测平台, 在你的整个项目环境中只是次要系统, 因此我们使用自己的轻量级框架来构建后端核心服务. 所以你 不需要自己部署并维护大数据相关的平台, SkyWalking 在技术栈方面应该足够简单.
  • 可插拔. SkyWalking 核心团队提供了许多默认实现, 但这肯定是不够的, 也不可能适用于每一种场景, 因此我们提供了大量的特性来支持可插拔功能.
  • 可移植. SkyWalking 可以运行在多种环境下, 包括: (1) 传统的注册中心, 如 Eureka. (2) 带服务自动发现功能的 RPC 框架, 如 Spring Cloud, Apache Dubbo. (3) 现代基础设施中的服务网格. (4) 云服务. (5) 跨云部署. SkyWalking 在所有这些场景下都应该能够正常工作.
  • 可互操作. 可观测性是一个庞大的领域, 即使有强大的社区, SkyWalking 不可能支持所有方方面面, 因此 SkyWalking 支持与其他运维支撑系统进行互操作, 主要是探针, 如 Zipkin, Jaeger, OpenTracing 和 OpenCensus. SkyWalking 接收并理解他们的数据格式, 这对于终端用户来说是非常有用的, 因为不需要他们更换已有的库.
文章来源: https://www.toutiao.com/group/6738409923920527875/