全链路监控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优点

  • 兼容OpenTracing API,写起来简单方便
  • UI相较于Zipkin的更加直观和丰富
  • sdk比较丰富,go语言编写,支持 Go, Java, Node, Python, C++ and C#
  • 上传采用的是udp传输,效率高速度快
  • 后台存储支持Cassandra 3.4+,Elasticsearch 5.x, 6.x, 7.x,Kafka

Jaeger架构

Jaeger组件介绍

jaeger-client jaeger 的客户端,实现了opentracing协议 开销很小
jaeger-agent jaeger 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

全链路监控Jaeger相关推荐

  1. istio 实战 六 全链路监控 - Jaeger

    系列文章 istio 实战 一 Kubernetes 中快速搭建 istio istio 实战 二 bookinfo 部署 istio 实战 三 智能路由 istio 实战 四 权重路由以及监控 is ...

  2. jaeger php,全链路监控Jaeger搭建实战

    Jaeger为何物? Jaeger 是Uber推出的一款开源分布式追踪系统,兼容OpenTracing API.分布式追踪系统用于记录请求范围内的信息.例如,一次远程方法调用的执行过程和耗时.是我们排 ...

  3. 阿里巴巴山猎:手把手教你玩转全链路监控

    作者:山猎@阿里巴巴 排版:大白 全文12000字 读完需要 30 分钟 速读仅需 5 分钟 1 前言 随着分布式技术的发展与演进,微服务技术成为了大型分布式IT架构的必然选择.从本质上来讲,微服务是 ...

  4. 全链路监控细节和难点剖析!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料!原文 | https://www.jianshu.com/p ...

  5. 主流微服务全链路监控系统之战

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料!问题背景随着微服务架构的流行,服务按照不同的维度进行拆分,一次 ...

  6. 实现一个全链路监控平台很难吗?Pinpoint、skywalking、zipkin,哪个实现比较好?...

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往 ...

  7. 实现一个全链路监控平台很难吗?一点都不难。。。

    0 问题背景 随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现 ...

  8. 一文搞懂全链路监控:方案概述与比较!

    作者:陶邦仁 https://www.jianshu.com/p/92a12de11f18 0 - 问题背景 随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务.互联网应 ...

  9. PinPoint分布式全链路监控

    PinPoint分布式全链路监控 安装需要的所有包下载路径: 链接: https://pan.baidu.com/s/1sl9dP9r 密码: jsux 介绍: PinPoint是一个开源的APM(( ...

最新文章

  1. 空间点像素索引(二)
  2. java实现时间的比较
  3. Android Handler 流程解析
  4. iPhone重回5千档!苹果浴霸三摄新机发布,吊打华为上代芯,绝口不提5G
  5. linux内核自旋锁API
  6. php文字超链接怎么写,php 文本URL转换为超链接功能实例
  7. Bootstrap4+MySQL前后端综合实训-Day02-AM【Bootstrap4(入门、环境搭建、文字排版、颜色、表格、图片、进度条、折叠、输入框组、模态框)、Font Awesome字体图标】
  8. 用户画像_什么是“用户画像”?如何利用用户画像进行精准营销?
  9. 适用响应式 Web UI 框架
  10. HTML:H5中新增表单标签<fieldset>
  11. 渐渐热起来的网盘搜索工具
  12. Docker安装加速器
  13. 平面向量内积坐标公式推导_向量内积的坐标表示.ppt
  14. hive生产实践问题(一)在使用Hive Client跑job时,一直提示job被kill,
  15. 生活随记 - 75公斤重 急需减肥
  16. 知乎live-李笑来-人人都能用英语-笔记
  17. 抽象类与接口的异同点
  18. Python使用pillow库往图片上写入文字或覆盖另一张图片
  19. Linux内核源码阅读以及工具(转)
  20. 在树莓派上安装麦克风监测音量

热门文章

  1. oracle重做日志教程,Oracle重做日志管理
  2. TweenMax介绍
  3. 送戒指创意 让婚礼不再单调
  4. dns劫持解决办法、dns劫持是什么、dns劫持原理
  5. Linux搭建Postfix邮件服务器
  6. html5谷歌地图,谷歌地图API和HTML 5
  7. SUNDIALS中的RTOL和ATOL
  8. 如何搭建易企秀H5平台?
  9. 概率论第六章——矩估计
  10. 【英语:发音基础】A1.元音与辅音