首页   快速返回

OpenTracing入门     所属分类 opentracing
单体系统 微服务 物理机到虚拟资源
面向 DevOps 的诊断与分析系统 
集中式日志系统(Logging)
集中式度量系统(Metrics)
分布式追踪系统(Tracing)

Logging 用于记录离散的事件。例如应用程序的调试信息或错误信息,是诊断问题的依据。
Metrics 用于记录可聚合的数据。例如HTTP请求个数可被定义为一个计数器,新请求到来时进行累加。
Tracing 用于记录请求范围内的信息。例如一次远程调用的执行过程和耗时,是排查系统性能问题的利器。

Zipkin 专注于 tracing 领域
Prometheus 开始专注于 metrics,随着时间推移可能会集成更多的 tracing 功能
ELK 开始专注于 logging 领域,同时也不断地集成其他领域的特性


tracing论文
Dapper, a Large-Scale Distributed Systems Tracing Infrastructure
Uncertainty in Aggregate Estimates from Sampled Distributed Traces

Dapper(Google) : 各 tracer 的基础
StackDriver Trace (Google)
Zipkin(twitter)
Appdash(golang)
鹰眼(taobao)
谛听(盘古,阿里云云产品使用的Trace系统)
云图(蚂蚁Trace系统)
sTrace(神马)
X-ray(aws)

分布式追踪系统的核心功能
代码埋点,数据存储、查询展示


一个分布式调用的例子,客户端发起请求,请求首先到达负载均衡器,接着经过认证服务,计费服务,然后请求资源,最后返回结果。
数据被采集存储后,分布式追踪系统一般会选择使用包含时间轴的时序图来呈现这个 Trace。

数据采集过程,需要侵入用户代码,不同系统的 API 可能不兼容

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

OpenTracing 的优势
OpenTracing 已进入 CNCF,正在为全球的分布式追踪,提供统一的概念和数据标准。
OpenTracing 通过提供平台无关、厂商无关的 API,使得开发人员能够方便的添加(或更换)追踪系统的实现。

OpenTracing 数据模型


OpenTracing 中的 Trace(调用链)通过归属于此调用链的 Span 来隐性的定义。
一条 Trace(调用链)可以被认为是一个由多个 Span 组成的有向无环图(DAG图),Span 与 Span 的关系被命名为 References。

An operation name,操作名称
A start timestamp,起始时间
A finish timestamp,结束时间
Span Tag,一组键值对构成的 Span 标签集合。键值对中,键必须为 string,值可以是字符串,布尔,或者数字类型。
Span Log,一组 span 的日志集合。
每次 log 操作包含一个键值对,以及一个时间戳。
键值对中,键必须为 string,值可以是任意类型。
但是需要注意,不是所有的支持 OpenTracing 的 Tracer,都需要支持所有的值类型。

SpanContext,Span 上下文对象 (下面会详细说明)
References(Span间关系),相关的零个或者多个 Span(Span 间通过 SpanContext 建立这种关系)
每一个 SpanContext 包含以下状态:

任何一个 OpenTracing 的实现,都需要将当前调用链的状态(例如:trace 和 span 的 id),依赖一个独特的 Span 去跨进程边界传输
Baggage Items,Trace 的随行数据,是一个键值对集合,它存在于 trace 中,也需要跨进程边界传输


OpenTracing 实现
比较流行的为 Jaeger 和 Zipkin。

Jaeger 主要组成部分

Client 
为不同语言实现了符合 OpenTracing 标准的 SDK。
应用程序通过 API 写入数据,client library 把 trace 信息按照应用程序指定的采样策略传递给 agent。

Agent  
是一个监听在 UDP 端口上接收 span 数据的网络守护进程,将数据批量发送给 collector。
被设计成一个基础组件,部署到所有的宿主机上。
Agent 将 client library 和 collector 解耦,为 client library 屏蔽了路由和发现 collector 的细节。

Collector 
接收 agent 发送来的数据,写入后端存储。
无状态的组件,可以同时运行任意数量的 collector。

Data Store 
一个可插拔的组件,支持将数据写入 cassandra elasticsearch。
Query 接收查询请求,从后端存储系统中检索 trace 并通过 UI 进行展示。
Query 无状态,可以启动多个实例,部署在 nginx 等负载均衡器后面。



Metrics, tracing, and logging
http://peter.bourgon.org/blog/2017/02/21/metrics-tracing-and-logging.html

OpenTracing 中文文档 
https://wu-sheng.gitbooks.io/opentracing-io/content/

OpenTracing tutorial 
https://github.com/yurishkuro/opentracing-tutorial

Jaeger 
http://jaeger.readthedocs.io/en/latest/getting_started/

上一篇     下一篇
监控系统相关资料整理

gossip简单介绍

redis持久化与恢复

kubernetes2018

开源监控系统介绍

graphite概述