SOFATracer

分布式链路追踪中间件
授权协议 Apache 2.0
开发语言 Java
所属分类 服务器软件、 分布式应用/网格
软件类型 开源软件
地区 国产
投 递 者 姬国安
操作系统 跨平台
开源组织 蚂蚁金服
适用人群 未知
 软件概览

SOFATracer 是一个用于分布式系统调用跟踪的组件,通过统一的 traceId 将调用链路中的各种网络调用情况以日志的方式记录下来,以达到透视化网络调用的目的。这些日志可用于故障的快速发现,服务治理等。

一、背景

在目前的技术架构实施中,统一采用面向服务的分布式架构,通过服务来支撑起一个个应用,而部署在应用中的各种服务通常都是用复杂大规模分布式集群来实现的,同时,这些应用又构建在不同的软件模块上,这些软件模块,有可能是由不同的团队开发,可能使用不同的编程语言来实现、有可能部署了几千台服务器。因此,就需要一些可以帮助理解各个应用的线上调用行为,并可以分析远程调用性能的组件。

为了能够分析应用的线上调用行为以及调用性能,蚂蚁金服基于 OpenTracing 规范 提供了分布式链路跟踪 SOFATracer 的解决方案。

二、功能简介

为了解决在实施大规模微服务架构时的链路跟踪问题,SOFATracer 提供了以下的能力:

2.1 基于 OpenTracing 规范提供分布式链路跟踪解决方案

基于 OpenTracing 规范 并扩展其能力提供链路跟踪的解决方案。各个框架或者组件可以基于此实现,通过在各个组件中埋点的方式来提供链路跟踪的能力。

2.2 提供异步落地磁盘的日志打印能力

基于 Disruptor 高性能无锁循环队列,提供异步打印日志到本地磁盘的能力。框架或者组件能够在接入时,在异步日志打印的前提下可以自定义日志文件的输出格式。SOFATracer 提供两种类似的日志打印类型即摘要日志和统计日志,摘要日志:每一次调用均会落地磁盘的日志;统计日志:每隔一定时间间隔进行统计输出的日志。

2.3 支持日志自清除和滚动能力

异步落地磁盘的 SOFATracer 日志支持自清除和滚动能力,支持按照按照天清除和按照小时或者天滚动的能力

2.4 基于 SLF4J MDC 的扩展能力

SLF4J 提供了 MDC(Mapped Diagnostic Contexts)功能,可以支持用户定义和修改日志的输出格式以及内容。SOFATracer 集成了 SLF4J MDC 功能,方便用户在只简单修改日志配置文件即可输出当前 Tracer 上下文的 tracerId 和 spanId

2.5 界面展示能力

SOFATracer 可以将链路跟踪数据远程上报到开源产品 Zipkin 做分布式链路跟踪的展示。

2.6 统一配置能力

配置文件中提供丰富的配置能力以定制化应用的个性需求。

  • SOFATracer 是一个用于分布式系统调用跟踪的组件,通过统一的 traceId 将调用链路中的各种网络调用情况以日志的方式记录下来,以达到透视化网络调用的目的。这些日志可用于故障的快速发现,服务治理等。 从 RoadMap 和 PR 来看,目前 SOFATracer 已经支持了丰富的组件插件埋点。 目前还未支持的主要是 Dubbo、MQ 以及 Redis 等。本文将从 SOFATracer

 相关资料
  • 在SOFARPC(5.4.0及之后的版本) 后的版本中,我们集成了SOFATracer的功能,默认开启,可以输出链路中的数据信息。 默认为 JSON 数据格式,具体的字段含义解释如下: RPC 客户端 摘要日志( rpc-client-digest.log) 日志打印时间 TraceId SpanId Span 类型 当前 appName 协议类型 服务接口信息 方法名 当前线程名 调用类型 路由

  • 概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - 捕获异常,这篇文章咱们分享:路由中间件 - Jaeger 链路追踪。 啥是链路追踪? 我理解链路追踪其实是为微服务架构提供服务的,当一个请求中,请求了多个服务单元,如果请求出现了错误或异常,很难去定位是哪个服务出了问题,这时就需要链路追踪。 咱们先看一张图: 这张图的调用链还比较清晰,咱们想象一下,随着服务的越来越多,服务与服务之间调用关

  • 概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - Jaeger 链路追踪(理论篇),这篇文章咱们接着分享:路由中间件 - Jaeger 链路追踪(实战篇)。 这篇文章,确实让大家久等了,主要是里面有一些技术点都是刚刚研究的,没有存货。 先看下咱们要实现的东西: API 调用了 5 个服务,其中 4 个 gRPC 服务,1 个 HTTP 服务,服务与服务之间又相互调用: Speak 服务,

  • 配置了Sleuth可以很方便查看微服务的调用路线图,可快速定位问题。 SOP基于SpringCloud,因此只要整合Spring Cloud Sleuth即可。 除此之外,还需要支持dubbo的链路的跟踪,Sleuth在2.0已经对dubbo做了支持,详见:brave-instrumentation-dubbo-rpc 接入Spring Cloud Sleuth步骤如下: 下载zipkin服务器

  • 在微服务场景下,我们会拆分出来很多的服务,也就意味着一个业务请求,少则跨越 3-4 个服务,多则几十个甚至更多,在这种架构下我们需要对某一个问题进行 Debug 的时候是极其困难的一件事情,那么我们就需要一个调用链追踪系统来帮助我们动态地展示服务调用的链路,以便我们可以快速地对问题点进行定位,亦可根据链路信息对服务进行调优。 在 Hyperf 里我们提供了 hyperf/tracer 组件来对各个

  • 在Git中‘追踪分支’是用与联系本地分支和远程分支的. 如果你在’追踪分支'(Tracking Branches)上执行推送(push)或拉取(pull)时, 它会自动推送(push)或拉取(pull)到关联的远程分支上. 如果你经常要从远程仓库里拉取(pull)分支到本地,并且不想很麻烦的使用"git pull "这种格式; 那么就应当使用‘追踪分支'(Tracking Branches). ‘

  • 日前,观察性分析平台和应用性能管理系统 SkyWalking 完成了与云原生网络代理 MOSN 的集成,作为 MOSN 中的支持的分布式追踪系统之一,旨在实现在微服务和 Service Mesh 中的更强大的可观察性。 相比传统的巨石(Monolith)应用,微服务的一个主要变化是将应用中的不同模块拆分为了独立的进程。在微服务架构下,原来进程内的方法调用成为了跨进程的远程方法调用。相对于单一进程内

  • 当我将单体应用拆成多个微服务之后,如何监控服务之间的依赖关系和调用链,以判断应用在哪个服务环节出了问题,哪些地方可以优化?这就需要用到分布式追踪(Distributed Tracing)。 CNCF 提出了分布式追踪的标准 OpenTracing,它提供用厂商中立的 API,并提供 Go、Java、JavaScript、Python、Ruby、PHP、Objective-C、C++ 和 C# 这九