分布式链路追踪

前言

if you can't measure it, you can't improve it --lord kelvin

1
you build it, you run it, you monitor it.     -- 亚马逊CTO

什么是APM系统

SkyWalking 是一个基于opentracing规范开源的APM(应用性能管理application performance management)系统

什么是OpenTracing

分布式链路追踪最先由Google在 Dapper论文中提出,而opentracing通过提供平台无关的规范

  • 调用过程图:

image.png

主流的APM系统

  • PinPoint

  • skywalking (apache的基金会)

  • Zipkin (Twitter开源的)

  • CAT (大众点评开源的)

发展历史

两个分支:

  • 基于 ebay CAL: CAL, 美团CAT
  • 基于Dapper论文: 携程CTrace , skywalking,zipkin,open tracing

APM监控的报表:(CAT的报表)

核心概念

  • Trace: 代表一次完整的调用链路
  • Span: 代表一个方法, 多个span组成一个Trace

  • Annotation: Span上附着的日志信息

  • Sampling: 采样率(为了节省日志存储的空间, 比方说每10个请求,才记录一次,这就是采样率)
  • tid(trace Id): 这个traceId是唯一的
  • sid(span Id): 这个就是每次调用的spanId service1 调用 service2 会生成两个 spanId 每个spanId 不重复
  • pid(parent Id): service1 调用 Service2 的 parentId 是 service1中那个方法的 spanId

CAT 深入理解

业务大盘

LogView 的报表

第一层的 category 是带包

Transaction 报表

调用 transaction报表

1
下图介绍了一些 95line  99line  如果95line 和 99line 对服务的延迟不大的话代表服务较为稳定

Event报表

Problem报表

HeartBeat 报表

这个报表检测一些GC的情况

Storage报表

主要是对数据库的访问和监控

CAT的架构原理

  1. 首先一个 Http请求过来了,CAT 会使用TreadLocal 创建一个当前线程的 消息树
  2. Call 开始,就往消息树上添加 Call节点
  3. SQL执行,就往消息树上添加SQL 节点
  4. Cache命中,就往消息树上添加Cache节点
  5. http请求结束返回,消息树就构建结束,将消息树放到MQ上
  6. 另一端会有一个sender读取 MQ 发送到CAT的server 上

服务端的架构

server端通过 receiver 接受 Sender 发来的数据, 然后通过Analyzer 对它进行分析聚合,按一分钟,一小时 各种维度进行聚合,聚合后的数据 存入mysql, 原始的数据,存入HDFS中

CAT 监控模型

监控API的代码实现

CAT 日志代表的含义

1
2
3
4
5
6
7
8
9
10
11
::hide::   一个::hide:: 代表是在另一个进程里了   每个进程的执行信息可以用hide来折叠

下面我展开所有的::hide::
查看到的执行逻辑
step1: 进程1-localhost8081 通过call url localhost:8081/start 调用 进程2-localhost8082

step2: 进程2-localhost8082 通过call url http://localhost:8082/startOfBackOffice-Service 调用 进程3-localhost8083 (进程3-localhost8083 没有在调用其他的进程)

step3: 进程2-localhost8082 通过call url http://localhost:8084/startOfCustomer-Microservice 调用 进程4-localhost8084 (进程4-localhost8084 没有在调用其他的进程)

step4: 结束并且返回
下图有text 和 graph