目录
概况
分布式链路追踪(Distributed Tracing),也叫 分布式链路跟踪,分布式跟踪,分布式追踪
产生背景
随着微服务架构和容器技术的兴起,一个看似简单的应用,后台可能有几十个甚至几百个服务在支撑;一个前端的请求可能需要多次的服务调用最后才能完成;当请求变慢或者不可用时,我们无法得知是哪个后台服务引起的,这时就需要解决如何快速定位服务故障点,分布式跟踪系统就能很好的解决这样的问题,帮助我们快速发现错误以及监控分析每条链路上的性能瓶颈。
APM
APM全称Application Performance Management应用性能管理,目的是通过各种探针采集数据,收集关键指标,同时搭配数据呈现以实现对应用程序性能管理和故障管理的系统化解决方案。Zabbix、Premetheus、open-falcon等监控系统主要关注服务器硬件指标与系统服务运行状态等,而APM系统则更重视程序内部执行过程指标和服务之间链路调用情况的监控,APM更有利于深入代码找到请求响应“慢”的根本问题,与Zabbix之类的监控是互补关系。
OpenTracing
OpenTracing组织,旨在推进调用链监控的规范和标准工作,统一规范化链路监控产吕,为了避免碎片化,促进互操作性。
OpenTraceing API参考:https://github.com/opentracing/opentracing-java
主流组件
类型 | zipkin | SkyWalking(推荐) | 美团CAT | 阿里鹰眼(Eagleeye) |
开源性 | Twitter开源 | 国产开源,Apache | 国产开源 | 不开源 |
基本原理 | 拦截请求,发送(HTTP,mq)数据至zipkin服务 | java探针,字节码增强 | 代码埋点(拦截器,注解,过滤器等) | 代码埋点(拦截器,注解,过滤器等) |
接入方式 | 基于linkerd或者spring cloud sleuth方式,引入配置即可 | avaagent字节码,无代码入侵 | 多种方式,java可直接引入jar | 多种方式,java可直接引入jar |
支持OpenTracing | 是 | 是 | 否 | 否 |
颗粒度 | 接口级(类级别) | 方法级 | 代码级 | 代码级 |
存储 | ES,mysql,Cassandra,内存 | ES,H2,TIDB | mysql,hdfs | hdfs |
agent到collector的协议 | http,MQ | http,gRPC | http/tcp | http/tcp |
官网 | ||||
全局调用统计 | 不支持 | 支持 | 支持 | 支持 |
trace查询 | 支持 | 支持 | 不支持 | 支持 |
报警 | 不支持 | 支持 | 支持 | 支持 |
JVM监控 | 不支持 | 支持 | 不支持 | 不支持 |