全链路监控Jaeger

全链路监控Jaeger

目录

全链路监控Jaeger

Jaeger为何物?

分布式追踪系统核心步骤

 Jaeger系统

Jagger优点

Jaeger架构

Jaeger组件介绍

Span

Jaeger特性

1.高扩展性

2.原生支持OpenTracing

3 多存储后端

4 现代化的UI

5 云原生部署

6 可观察性

7 安全

8 与Zipkin的向后兼容性

Jaeger实践

All in one部署

部署示例APP

端口说明


Jaeger为何物?

Jaeger 是Uber推出的一款开源分布式追踪系统,兼容OpenTracing API,它用于监视和诊断基于微服务的分布式系统.分布式追踪系统用于记录请求范围内的信息,eg.一次远程方法调用的执行过程和耗时。是我们排查系统问题和系统性能的利器。

分布式追踪系统核心步骤

分布式追踪系统种类繁多,但是核心步骤有三个

  1. 代码埋点
  2. 数据存储
  3. 查询展示

 Jaeger系统

  • 分布式上下文传播
  • 分布式交易监控
  • 根本原因分析
  • 服务依赖性分析性能/延迟优化

Jagger优点


 

Jaeger架构

 

Jaeger组件介绍

jaeger-clientjaeger 的客户端,实现了opentracing协议 开销很小
jaeger-agentjaeger client的一个代理程序,client将收集到的调用链数据发给agent,然后由agent发给collector
jaeger-collector负责接收jaeger client或者jaeger agent上报上来的调用链数据,然后做一些校验,比如时间范围是否合法等,最终会经过内部的处理存储到后端存储
jaeger-query专门负责调用链查询的一个服务,有自己独立的UI
jaeger-ingester中文名称“摄食者”,可用从kafka读取数据然后写到jaeger的后端存储,比如Cassandra和Elasticsearch
spark-job基于spark的运算任务,可以计算服务的依赖关系,调用次数等

其中jaeger-collector和jaeger-query必须的其余的都是可选的,我们没有采用agent上报的方式,而是让客户端直接通过endpoint上报到collector。

Span

Span表示Jaeger中的逻辑工作单元,具有操作名称,操作的开始时间和持续时间。跨度可以嵌套并排序以建立因果关系模型。

每个 Span 包含以下对象:

  • Operation name:操作名称 (也可以称作 Span name)。
  • Start timestamp:起始时间。
  • Finish timestamp:结束时间。
  • Span tag:一组键值对构成的 Span 标签集合。键值对中,键必须为 String,值可以是字符串、布尔或者数字类型。
  • Span log:一组 Span 的日志集合。每次 Log 操作包含一个键值对和一个时间戳。键值对中,键必须为 String,值可以是任意类型。
  • SpanContext: pan 上下文对象。每个 SpanContext 包含以下状态:
    • 要实现任何一个 OpenTracing,都需要依赖一个独特的 Span 去跨进程边界传输当前调用链的状态(例如:Trace 和 Span 的 ID)。
    • Baggage Items 是 Trace 的随行数据,是一个键值对集合,存在于 Trace 中,也需要跨进程边界传输。
  • References(Span 间关系):相关的零个或者多个 Span(Span 间通过 SpanContext 建立这种关系)

Jaeger特性

1.高扩展性

Jaeger后端的设计没有单点故障,可以根据业务需求进行扩展。例如,Uber上任何给定的Jaeger安装通常每天要处理数十亿个跨度。

2.原生支持OpenTracing

Jaeger后端,Web UI和工具库已完全设计为支持OpenTracing标准。

  • 通过跨度引用将迹线表示为有向无环图(不仅是树)

  • 支持强类型的跨度标签和结构化日志通过行李

  • 支持通用的分布式上下文传播机制

3 多存储后端

Jaeger支持两个流行的开源NoSQL数据库作为跟踪存储后端:Cassandra 3.4+和Elasticsearch 5.x / 6.x / 7.x。正在进行使用其他数据库的社区实验,例如ScyllaDB,InfluxDB,Amazon DynamoDB。Jaeger还附带了一个简单的内存存储区,用于测试设置。

4 现代化的UI

Jaeger Web UI是使用流行的开源框架(如React)以Javascript实现的。v1.0中发布了几项性能改进,以允许UI有效处理大量数据,并显示具有成千上万个跨度的跟踪。

5 云原生部署

Jaeger后端作为Docker映像的集合进行分发。这些二进制文件支持各种配置方法,包括命令行选项,环境变量和多种格式(yaml,toml等)的配置文件。Kubernetes模板和Helm图表有助于将其部署到Kubernetes集群。

6 可观察性

默认情况下,所有Jaeger后端组件都公开Prometheus指标(也支持其他指标后端)。使用结构化日志库zap将日志写到标准输出。

7 安全

Jaeger的第三方安全审核可在https://github.com/jaegertracing/security-audits中获得。

8 与Zipkin的向后兼容性

尽管我们建议使用OpenTracing API来对应用程序进行检测并绑定到Jaeger客户端库,以从其他地方无法获得的高级功能中受益,但是如果您的组织已经使用Zipkin库对检测进行了投资,则不必重写所有代码。Jaeger通过在HTTP上接受Zipkin格式(Thrift或JSON v1 / v2)的跨度来提供与Zipkin的向后兼容性。从Zipkin后端切换只是将流量从Zipkin库路由到Jaeger后端的问题


Jaeger实践

Trace View

Trace Detail View

All in one部署

为了方便大家快速使用,Jaeger直接提供一个All in one的docker镜像,通过All in one的image,我们可以通过以下命令直接启动一套完整的Jaeger tracing系统:

$ docker run -d -e \
  COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
  -p 5775:5775/udp \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 14268:14268 \
  -p 9411:9411 \
  jaegertracing/all-in-one:latest

一旦启动成功后,就可以去 http://localhost:16686 看到Jaeger UI了 

部署示例APP

docker run --rm -it \
  --link jaeger \
  -p 8080-8083:8080-8083 \
  -e JAEGER_AGENT_HOST="jaeger" \
  jaegertracing/example-hotrod:1.14 \
  all

部署后通过 http://localhost:8080/ 访问,并点击订购车辆

 

端口说明

端口        协议        所属模块             功能
5775        UDP        agent             通过兼容性Thrift协议,接收Zipkin thrift类型数据
6831        UDP        agent             通过兼容性Thrift协议,接收Jaeger thrift类型数据
6832       UDP        agent             通过二进制Thrift协议,接收Jaeger thrift类型数据
5778        HTTP      agent             配置控制服务接口
16686      HTTP      query            客户端前端界面展示端口
14268      HTTP      collector       接收客户端Zipkin thrift类型数据
14267      HTTP      collector       接收客户端Jaeger thrift类型数据
9411         HTTP      collector       Zipkin兼容endpoint

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值