本文将从以下三个方面阐述全链路跟踪设计与实践
-
为什么要做全链路跟踪
-
怎么做全链路跟踪
-
开源框架选型
为什么要做全链路跟踪
- 场景介绍
在微服务架构下,经常出现以下问题:
1.某个服务出了故障,如何快速定位问题?
2.应用程序出了瓶颈,如何快速确定瓶颈在哪里?
3.后台服务响应延迟高,如何确认哪些服务导致的?
4.服务发布后,如何确认是否一切正常?
- 解决方案
基于日志的分布式请求跟踪系统,对业务侵入低;同时将系统分散的日志聚合,进行海量日志分析,从而生成有价值的数据。
怎么做全链路跟踪
核心技术
- 每次请求都生成一个全局唯一的ID(TraceId),通过它将不同系统的生成的日志串起来,重组成调用链。
- 各业务系统只要引入jar包或者通过探针(Agent)就可以实现无侵入的接入。
- 提供可视化的查询界面,快速的查询调用链路,以及多维度的调用分析。
架构设计
根据上述方案,我们先看下完整的设计图吧。
全链路跟踪.png
设计说明
1.埋点和日志生成:Java探针将本地日志通过本地socket方式发送给本机上的Trace日志收集节点Agent中。然后将多个探针的日志发送给日志收集服务集群。
2.Trace日志收集服务将数据进行简单的格式化处理后,分成三个工作流进行后续处理。
- 原始数据全量保存到Elasticsearch,后续对数据进行实时的调用查询。
- Spark对数据进行实时分析,形成QPS、平均耗时等实时统计。
- Hadoop对日志进行离线分析,并将结果存储到Elasticsearch。
3.Dasboard页面展示,通过可视化的界面查询Redis和Elasticsearch中的数据。
ID设计
全链路跟踪-ID设计.png
开源框架选型
目前比较成熟的开源框架主要有Zipkin、PinPoint、Skywalking三种。下面就简单比较下各自的适用场景吧:
- Zipkin:Dapper论文的典型实现,功能稍显单一,若只需要简单的链路跟踪功能可以选择使用。
- PinPoint:韩国开源的一款功能强大、完善的APM工具,提供了可视化的链路调用拓扑图、日志查询、统计分析等一系列功能。缺点就是依赖HBase,安装运维成本较高,适合中大型公司。
- Skywalking:国产的优秀APM工具,功能没有PinPoint强大,且使用Mysql存储,在大数据量下比较局限性,适合中小型公司。












网友评论