全链路追踪目的 

微服务背景下

1.故障快速定位

跨语言实现开发中在业务日志中添加调用链ID,可以通过调用链结合业务日志快速定位错误信息。

2.各个调用环节的性能分析

分析调用链的各个环节耗时,分析系统的性能瓶颈,找到系统的薄弱环节针对性优化

3.数据分析

分析用户的行为路径,经过了哪些服务器上的哪个服务加以应用。

4.调用拓扑图

Trace系统设计目标

低侵入、低损耗、大范围部署

基本实现

埋点日志内容,通过记录traceId、RPCId、调用的开始时间,调用类型,协议类型,调用方ip和端口,请求的服务名等信息;调用耗时,调用结果,异常信息,消息报文等;

典型应用

非开源:Google的Dapper,淘宝的鹰眼,新浪的Watchman,京东的Hydra

开源:zipkin, pinpoint , skywalking

应用及分析

1.鼻祖:Google Dapper

谷歌tracing论文,关键字:低损耗、应用透明的、大范围部署需求;大规模集群的跟踪监控系统;跨应用跨服务器;ops-dev;

应用级透明:把核心跟踪代码做的很轻巧,然后把它植入到那些无所不在的公共组件种,比如线程调用、控制流以及RPC库

实现:为服务器上每一次你发送和接收动作来收集跟踪标识符(message identifiers)和时间戳(timestamped events),通过把代码植入限制在一个很小的通用组件库,实现监测系统的应用对开发人员的透明。

Dapper的跟踪模型:

跟踪树和span

ABCDE 5个span 组成了userRequest的跟踪树。Dapper会记录span名称,以及每个span的ID和父ID,以重建在一次追踪过程中不同span之间的关系。如果一个span没有父ID被称为root span。所有span都挂在一个特定的跟踪上,也共用一个跟踪id。所有这些ID用全局唯一的64位整数标示。

一个单独的span的细节图:

注意时间戳的正确性处理:由于客户端和服务器上的时间戳来自不同的主机,我们必须考虑到时间偏差。在我们的分析工具,我们利用了这个事实:RPC客户端发送一个请求之后,服务器端才能接收到,对于响应也是一样的(服务器先响应,然后客户端才能接收到这个响应)。这样一来,服务器端的RPC就有一个时间戳的一个上限和下限。

注:为保护Dapper的用户意外的过分热衷于日志的记录,每一个跟踪span有一个可配置的总标注量的上限。

Dapper日志收集管道

span数据写入(1)本地日志文件中

然后Dapper的守护进程和收集组件把这些数据从生产环境的主机中拉出来(2)

最终写到(3)Dapper的Bigtable仓库中,一次跟踪被设计成Bigtable中的一行,每一列相当于一个span。

Dapper守护进程在负载测试时的CPU资源使用率

Dapper的数据收集在Google的生产环境中的只占用了0.01%的网络资源。

后台查询WEB UI

Dapper的“Depot API”或称作DAPI,对分布式跟踪数据一个直接访问

2.阿里EagleEye

EagleEye (鹰眼)是Google 的分布式调用跟踪系统 Dapper 在淘宝的实现(2013)。每次调用分配TraceId、RpcId(dapper中的spanID),放在ThreadLocal的调用上下文上面,调用结束的时候,把TraceId、RpcId打印到访问日志。访问日志里面,一般会记录调用时间、远端IP地址、结果状态码、调用耗时之类,也会记录与这次调用类型相关的一些信息,如URL、服务名、消息topic等。

优化:通过设置全局采样开关,用来在运行期控制调用链的采样率(控制打不打日志)。所谓调用链采样,就是根据TraceId来决定当前的这一次访问日志是否输出

鹰眼sdk写log ——>storm集群收集(全量 hdfs;实时hbase)——>鹰眼服务器——>UI

3.Pinpoint

韩国naver, Pinpoint is an APM tool for large-scale distributed systems written in Java / PHP. Inspired by Dapper. Show me demo

Architecture

new release 支持flink处理数据(apache flink:stream vs spark 流式处理来模拟批量处理 )

数据结构:(Span, Trace, 和 TraceId组成)同dapper

Core:字节码增强

使用字节码增强技术,不修改代码就工作。(代码零侵入,只需要加启动参数或通过配置文件加载即可)

JAVA字节码增强(before after 拦截器)在手工方法和自动方法两者之间属于自动方法。

应用3步走

1)docker 服务组建一键安装

2)启动服务,check web UI

3)应用添加配置,一次集成,运行手工.    eg. applicationContext-dao-config.xml

    <context:component-scan base-package="com.navercorp.pinpoint.web.dao.mysql" /><!-- SqlsessionFactory setup for MyBatis Database Layer --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><!-- mybatis basic config --><property name="configLocation" value="classpath:/mybatis-config.xml"/><!-- typeAliases --><property name="typeAliasesPackage" value="com.navercorp.pinpoint.web.alarm.vo" /><!-- setting the location of mapper --><property name="mapperLocations" value="classpath*:mapper/*Mapper.xml"/><!-- set "true" in order to catch the errors of declaration of statement more quickly --><property name="failFast" value="true"/><property name="plugins"><list><!-- use the patch version because of mybatis 3.2's incompatibility--><bean class="com.navercorp.pinpoint.web.dao.ibatis.BindingLogPlugin32"/></list></property></bean>

多插件集成

应有尽有:spring全家,mq mw、cache、rpc(dubbo、grpc)、db(hbase、mysql及drivers)……很丰富

4.Skywalking

中国华为吴晟基于OpenTracking实现的开源项目-2017年加入Apache孵化器,show demo

OpenTracking:OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。

Component:

H2:Database Engine

ShardingSphere:Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar

支持多语言多来源多格式数据输入:java、php、nodejs、go

Architecture

三层:

agent:探针,用来收集和发送数据到收集器

collector:链路数据收集器,数据可以落地ElasticSearch等Storage。

Storage&web:web可视化平台,用来展示落地的数据

Agent埋点实现

字节码增强:agent java 在类使用之前,增强或修改类的行为

Byte Buddy:Apache 2.0许可证的开源库,致力于解决字节码操作和API的复杂性

public class Agent {public static void premain(String argument, Instrumentation inst) {inst.addTransformer(new ClassFileTransformer() {@Overridepublic byte[] transform(ClassLoader loader,String className,Class<?> classBeingRedefined, // 如果类之前没有加载的话,值为nullProtectionDomain protectionDomain,byte[] classFileBuffer) {// 返回改变后的类文件。}});}
}

Agent模块:

  1. 加载配置信息
  2. 加载插件
  3. 加载所需服务
  4. 使用ByteBuddy增强class

接入应用

部署启动agent ,程序中简单配置agentconfig即可。同metrics.namespace

Pinpoint VS Skywalking

Pinpoint Skywalking
优势

  • 大企业/长时间验证,稳定性和完成度高
  • 探针收集的数据粒度比较细
  • HBase的数据密度较大,支持PB级别下的数据查询
  • 代码设计考虑的扩展性较弱,二次开发难度较大
  • 拥有完整的APM和调用链跟踪功能
优势

  • 数据容器为ES,查询支持的维度较多并且扩展潜力大
  • 项目易读性和扩展性都比较强
  • 主要的研发人员为华人并且均比较活跃,能够进行更加直接的沟通
  • 拥有完整的APM和调用链跟踪功能
劣势

  • 代码针对性强,扩展较难
  • 探针的额外消耗较多(探针采集粒度细,大概10%~20%)
  • 项目趋于成熟,而扩展难度较大,目前社区活跃度偏低,基本只进行探针的增加或者升级
  • 缺少自定义指标的设计
劣势

  • 项目发展非常快,稳定性有待验证
  • ES数据密度较小,在PB级别可能会有性能压力

5.zipkin

java by twitter,collector 收集器、storage 存储、api 查询api-ui 界面,jdk8 required

接入应用

1.引入zipkin maven dependency

2.java coding ,before after增强自动拦截,把config配置好即可。

public Brave brave(SpanCollector spanCollector){  Builder builder = new Builder("service2");//指定serviceName  builder.spanCollector(spanCollector);  builder.traceSampler(Sampler.create(1));//采集率  return builder.build();  }

6.TODO ONEAPM 优秀产品实现分析(insight全家桶)、腾讯bk-ci、   Prometheus

总结

由上面对主流全链路追踪技术的分析,组件基本都包括一个埋点sdk agent、日志收集collector、到storage (mysql、es、或bigdata)、最后集成webUI供用户查看。而sdk大多采用基于面向切面增强的方式,减少程序侵入性及接入成本。

APM —全链路追踪相关推荐

  1. 微服务下的APM全链路监控

    https://opentalk.upyun.com/333.html 2017 年 10 月 29 日,又拍云 Open Talk 联合 Spring Cloud 中国社区成功举办了"进击 ...

  2. mysql链路跟踪工具_SkyWalking全链路追踪利器

    随着目前系统架构的复杂度越来越高(中台.微服务),并且线上应用的多级监控覆盖到了通讯.应用处理过程监控并且实现端到端的应用监测,线上性能故障的快速定位修复:而传统的监控分析方式已经无法满足我们的需求, ...

  3. skywalking 安装_SkyWalking全链路追踪利器

    随着目前系统架构的复杂度越来越高(中台.微服务),并且线上应用的多级监控覆盖到了通讯.应用处理过程监控并且实现端到端的应用监测,线上性能故障的快速定位修复:而传统的监控分析方式已经无法满足我们的需求, ...

  4. 企业如何从 0 到 1 构建整套全链路追踪体系

    简介:本文将分享 ARMS 在全链路追踪领域的最佳实践,分享主要分为四部分.首先,是对分布式链路追踪的整体简介.其次,是对 ARMS 在分布式链路追踪领域的核心能力进行介绍.然后,介绍如何从 0 到 ...

  5. Skywalking全链路追踪使用说明

    1.背景与需求: 随着业务规模的不断增大,系统的复杂度也越来越高,我们的软件架构也进入了分布式的阶段,服务按照不同的维度进行拆分,那么一次请求可能横跨多个服务模块.项目,依赖的中间件也越来越多,其中任 ...

  6. go 链路追踪_Golang在七牛全链路追踪中的实践

    1.Go在七⽜牛全链路路追踪中的实践 刘凯 七⽜牛云⼤大数据团队(Pandora)架构师 2.⾃自我介绍 INTRODUCTION • 刘凯,七⽜牛,⼤大数据Pandora团队成员 • 2015年年, ...

  7. 得物云原生全链路追踪Trace2.0-采集篇

    一.0xcc开篇 2020年3月,得物技术团队在三个月的时间内完成了整个交易体系的重构,交付了五彩石项目,业务系统也进入了微服务时代.系统服务拆分之后,虽然每个服务都会有不同的团队各司其职,但服务之间 ...

  8. 前后端、多语言、跨云部署,全链路追踪到底有多难?

    作者|涯海 全链路追踪的价值 链路追踪的价值在于"关联",终端用户.后端应用.云端组件(数据库.消息等)共同构成了链路追踪的轨迹拓扑大图.这张拓扑覆盖的范围越广,链路追踪能够发挥的 ...

  9. 全链路追踪竟然如此简单? bytebuddy搭建全链路追踪的demo 附代码

    大家好,我是烤鸭:     最近一直在研究全链路追踪,比如cat.skywalking.zipkin等.     发现 skywalking 是基于bytebuddy 实现的,想自己试着写一下demo ...

最新文章

  1. FreeBSD设备驱动管理介绍(BSP: Ti AM335x)
  2. 浏览器如何渲染页面?
  3. linux设置共享权限设置命令,Linux系列知识详解(三)--------- Linux链接命令和权限管理命令...
  4. Android App 瘦身总结 第二章 jni动态库及cpu兼容
  5. 设计模式(第十七式:迭代器模式)
  6. 浙江3 2计算机学校,浙江有那些3+2学校
  7. [转载]KL距离(相对熵)
  8. Datawhale 202210 Excel | 第五、六、七章 Excel函数示例 Excel函数列表
  9. android系统解压zip文件,Android解压缩zip文件
  10. 用C语言打印1到100的罗马数字
  11. QCC3040---system state module
  12. 个人所得税计算器(简易)
  13. R语言使用epiDisplay包的power.for.2p函数进行效用分析 ( 效能分析、Power analysis)、给定两个样本的比例值(proportions)、样本量计算效用值
  14. ubuntu tweak_如何使用Ubuntu Tweak自定义Ubuntu
  15. c#PNG转换图片JPEG
  16. js限制input的输入字符的长度,区分中英文
  17. 2021年化工自动化控制仪表考试题库及化工自动化控制仪表报名考试
  18. win7计算机图标排列,win7系统桌面图标排列顺序打乱的操作方法
  19. 无人机飞控 ardupilot Copter-4.0.7 库简介
  20. Oracle数据库递归查询

热门文章

  1. 计算机开机后无法网络拨号怎样处理,拨号上网时电脑假死的原因和解决方法
  2. github出现HTTP request failed
  3. Linux 下压缩包解压后目录的权限问题
  4. 1、Mac如何剪切文件
  5. 制备a-CN_x、CrN、TiCN、TiAlN碳氮化物薄膜-供应锡硫化物薄膜 硫化亚锡(SnS)薄膜 电沉积硫化亚锡(SnS)薄膜 硫化亚锡(SnS)异质结薄膜 简易硫化亚锡(SnS)微米棒薄膜
  6. Android——讯飞语音唤醒简介及实现
  7. 机器学习----矩估计方法
  8. DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理 (1)
  9. 【报错】Cannot uninstall ‘certifi‘. It is a distutils installed project and thus we cannot accurately
  10. cmd 新增dns_cmd修改DNS,以及DNS大全