APM系统
• APM全称Application Performance Management应用性能管理,目的是通过各种探针采集数据,收集关键指标,同时搭配数据呈现以实现对应用程序性能管理和故障管理的系统化解决方案
• Zabbix、Premetheus、open-falcon等监控系统主要关注服务器硬件指标与系统服务运行状态等,而APM系统则更重视程序内部执行过程指标和服务之间链路调用情况的监控,APM更有利于深入代码找到请求响应“慢”的根本问题,与Zabbix之类的监控是互补关系
• 目前市面上开源的APM系统主要有CAT、Zipkin、Pinpoint、SkyWalking,大都是参考Google的Dapper实现的分布式链路追踪
什么是分布式链路追踪
• 分布式追踪,也被称为分布式请求追踪,是一种用于分析和监视应用程序的方法,特别是那些使用微服务架构构建的。分布式跟踪有助于查明发生故障的位置以及导致性能下降的原因。
opentracing
• 分布式链路追踪最先有google的dapper论文中提出,而opentracing通过规范与平台无关的API,使得开发人员能够方便地添加或更换追踪系统的实现。
skywalking概述
• 提供分布式链路追踪,服务网格遥测分析,度量(metric)聚合和可视化一体化解决方案。
• 特点:
• 多语言自动探针
• 多种监控手段、语言探针
• 轻量高效、不需要额外搭建大数据平台
• 模块化架构、ui、存储
• 支持告警
skywalking架构
SkyWalking采用组件式开发,易于扩展,主要组件作用如下:
Skywalking Agent: 采集tracing(调用链数据)和metric(指标)信息并上报,上报通过HTTP或者gRPC方式发送数据到Skywalking Collector
Skywalking Collector : 链路数据收集器,对agent传过来的tracing和metric数据进行整合分析通过Analysis Core模块处理并落入相关的数据存储中,同时会通过Query Core模块进行二次统计和监控告警
Storage: Skywalking的存储,支持以ElasticSearch、Mysql、TiDB、H2等作为存储介质进行数据存储
UI: Web可视化平台,用来展示落地的数据,目前官方采纳了RocketBot作为SkyWalking的主UI
skywalking概念
• 服务(Service) :表示对请求提供相同行为的一系列或一组工作负载。在使用 Agent 或 SDK 的时候,你可以定义服务的名字。如果不定义的话,SkyWalking 将会使用应用名称上定义的名字,为了和告警服务联动,这里推荐大家配置成应用中心中的应用名。
这里,我们可以看到 应用的服务为 "is-travel-business",这是在agent 环境变量 SW_AGENT_NAME 中所定义的。
• 端点(Endpoint) :对于特定服务所接收的请求路径, 如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名。
这里,我们可以看到 Spring Boot 应用的一个端点,为 API 接口 /api/banner/{id}。
• 服务实例(Service Instance) :上述的一组工作负载中的每一个工作负载称为一个实例。就像 Kubernetes 中的 pods 一样, 服务实例未必就是操作系统上的一个进程。但当你在使用 Agent 的时候, 一个服务实例实际就是操作系统上的一个真实进程。
这里,我们可以看到 Spring Boot 应用的实例为 {进程UUID}@{hostname},由 Agent 自动生成。
SW所有的指标信息都是围绕三者展开的。
参考
• https://www.jianshu.com/p/055e4223d054
• https://juejin.im/post/6873709827898638349?utm_source=gold_browser_extension