搭建jaegerAll in one 测试环境

news2024/9/23 5:24:16

1. Jaeger介绍

Jaeger 受 Dapper 和 OpenZipkin 的启发,是由 Uber Technologies 发布的开源分布式追踪系统。它用于监控和排查基于微服务的分布式系统问题,包括:

  • 分布式上下文传播
  • 分布式事务监控
  • 根因分析
  • 服务依赖关系分析
  • 性能 / 延迟优化

Jaeger 架构:

image-20230504114504571

image-20230504114613783

整体上讲,一个基础的 Jaeger 追踪系统包含下面几个部分:

  • jaeger-query: 用于客户端查询和检索组件,并包含了一个基础的 UI
  • jaeger-collector: 接收来自 jaeger-agent 的 trace 数据,并通过处理管道来执行。当前的处理管道包含验证 trace 数据,创建索引,执行数据转换以及将数据存储到对应的后端
  • jaeger-agent: 一个网络守护进程,侦听通过 UDP 发送的 spans ,它对其进行批处理并发送给收集器。它被设计为作为基础设施组件部署到所有主机。代理将收集器的路由和发现从客户机抽象出来
  • backend-storage: 用于指标数据存储的可插拔式后端存储,支持 Cassandra, Elasticsearch and Kafka
  • ingester: 可选组件,用于从 kafka 中消费数据并写入到可直接读取的 Cassandra 或 Elasticsearch 存储中

注意: trace 和 span 是链路追踪系统中的专业属于,span 就表示具体的一个工作单元,并且包含了该单元的元数据比如具体是什么操作,执行的时间等等,而 trace 是通过整个系统的数据路径,可以被认为是将 Spans 组成一个有向无环图 (DAG)

当前Jaeger的SDK支持有如下:

--官方 
1.Go 
2.Java 
3.Node 
4.Python 
5.C++ 
--非官方 
1.PHP
3.Others

2.Jaeger All in one部署

如果只是为快速感受使用Jaeger,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了,如下所示。

image-20230509161342874

注:在All in one模式下,Data Store使用的是内存,因此若重启dockre容器后就看不到之前的数据了。所以,该模式仅可用于前期demo或者验证,不可在生产环境中这样部署。

通过上述All in one启动方式,我们直接发现了Jaeger启动时占据了很多端口,当然,并不是所有的端口都是必需的,这儿简单列出这些端口的说明如下:

端口	协议	所属模块	     功能
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

3. Sampling

关于Jaeger系统中的采样方式,我们可以通过一个例子来解释。

假设有三个服务A,B,C,且存在一个简单的调用方式:A->B->C, 当服务A收到请求时,Jaeger检查该请求有没有trace信息,如果没有,将为其生成新的trace(TraceId为随机生成的),并基于当前的取样策略进行sampling。该取样策略会随着请求一路广播到服务B和C,因此这些服务将必须再做采样的策略选择。这种采样方式确保了当一个trace被采用后,它的所有后续spans都会被存储起来(若每层服务都再做一次采样策略选择的话,我们就会很难获取到完整的一个trace了)。

4. 代码入侵性

关于装载的方法,不同语言在网上的代码示例都很多。对于tracing这种监控类系统,一定不能对我们的业务代码侵入太高,因为我们的项目代码为golang,下面以golang代码中grpc下,jaeger的代码侵入性比较(为了提高可读性,直接展示出diff信息):

image-20230509161934004

我们看到,利用grpc的interceptor功能,jager只需要在拦截器中插入一个interceptor即可,整体代码的影响之有5行左右。(注:在业务代码中,grpc使用context来携带信息)

5. Jaeger使用

当我们正是使用jager后,可以通过两种方式来进行查看:

根据TraceId搜索

通过Web UI左上方,可以直接键入TraceId进行某次trace的搜索

根据服务节点查看

通过Web UI左边栏Find Traces,可以详细地进行高级搜索功能,支持服务名,操作,Tag信息(Jaeger中的tag功能,可以在context中加入tag,进行更过的标识)等。当我们确定搜索条件后,就可以查出符合条件的trace信息了

image-20230509162158009

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/506278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识TypeScript与静态类型解析

一、初识ts 二、如何运行ts代码 假如本地新建了一个b.ts文件 安装TypeScript:npm install -g typescript 编译代码:tsc b.ts 运行js:node b.js 在终端输入 tsc -init 生成 tsconfig.json 文件 类型注解:TypeScript里的类型注解是一…

浅学Go下的ssti

前言 作为强类型的静态语言,golang的安全属性从编译过程就能够避免大多数安全问题,一般来说也唯有依赖库和开发者自己所编写的操作漏洞,才有可能形成漏洞利用点,在本文,主要学习探讨一下golang的一些ssti模板注入问题…

手术麻醉信息系统源码 B/S网页版

手术麻醉信息系统源码 php mysql vue2 B/S网页版 手术麻醉信息系统是HIS产品中的一个组成部分,主要应用于医院的麻醉科,属于电子病历类产品。麻醉监护的功能覆盖整个手术与麻醉的全过程,包括手术申请与排班、审批、安排、术前、术中和术后…

什么是阿里云服务器?云服务器的优缺点

阿里云服务器是什么?云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,云服务器可以降低IT成本提升运维效率,免去企业或个人前期采购IT硬件的成本,阿里云服务器让用户像使用水、电、天然气等公共资源一样便捷、高效地使用服务器…

线程池工作原理和实现原理

为什么要使用线程池 平时讨论多线程处理,大佬们必定会说使用线程池,那为什么要使用线程池?其实,这个问题可以反过来思考一下,不使用线程池会怎么样?当需要多线程并发执行任务时,只能不断的通过…

如何压缩mp3文件大小,5分钟学会4种方法

如何压缩mp3文件大小?我们在开车的时候都很喜欢听歌,一般歌曲库里的mp3文件都很多,小编的就有上千首。如果我们还想要增加更多mp3文件,有时候就会出现内存不足的情况啦。所以我们需要压缩mp3文件大小,这样才能在我们手…

【TCP 协议】连接管理之 “三次握手,四次挥手”

哈喽,大家好~我是你们的老朋友:保护小周ღ 本期为大家带来的是网络编程中的 TCP 传输控制协议保证数据可靠性传输的机制之一的——连接管理,通信双方采用 “三次握手” 来建立连接,采用 “四次挥手” 会断开连接,如何…

小厂测试4年终于熬出头了,费时8个月,入职阿里,涨薪14K

前言 你的努力,终将成就无可替代的自己 本科毕业后就一直从事测试的工作,和多数人一样,最开始从事功能测试的工作,看着自己的同学一步一步往上走,自己还是在原地踏步,说实话这不是自己想要的状态。 一年半…

PSP - 替换 MSA 数据库 以及 OpenMM 和 mmCIF 异常

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130577390 关于 OpenMM: OpenMM 是用于分子动力学模拟的开源软件库,可以在不同的平台和硬件上运行,如 CPU、GPU 和 FPGA。OpenMM 提供一个高效的、灵活的和…

Spring Cloud第二季--服务网关Gateway

文章目录 一、Gateway和Zuul的区别二、Gateway的核心概念三、小试牛刀3.1、代码测试3.2、关于Predicate3.3、关于Filter 一、Gateway和Zuul的区别 Spring Cloud Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5,Spring Boot 2和 Project …

ORACLE 10G版本数据库系统产生大量归档日志问题的分析

一、服务概述 近期接到用户告知数据库归档暴增,导致生产库归档空间满,手动删除后,归档空间很快就会满。 立即登陆数据库系统,查询发现归档日志异常增长,从以前的每小时产生300M,增长到每小时产生59150M。…

使用thop计算参数和FLOPs时的疑问

文章目录 使用thop计算参数时的疑问x x.view(-1, 32 * 8 * 8)和x x.view(x.size(0), -1)区别是什么input_shape (3, 224, 224)这个张量是什么意思为什么summary计算时没有批次大小input_tensor torch.randn(1, *input_shape).to(device)这句代码什么意思flops, params pro…

1AE4混合电路耳放

设计目标: 1)20W以内的总功耗(包括灯丝部分); 2)最大输入1.2Vrms信号; 3)输出至少50毫瓦的功率; 4)至少5倍以上的阻尼系数。 1AE4是较后期的直热管&#xff0…

软件项目成本控制的5大关键点 不得不重视

软件项目成本一般分为运营成本和项目成本。而运营成本比较固定,压缩和削减的余地不大。而在项目成本中,最主要的成本是人工成本。那么如何提高项目开发效率,节约人工成本,对成本管理至关重要。 我们从以下几个影响项目成本的主要因…

[DeepSpeed]初代chatGPT模型部署实践

DeepSpeed Chat 部署方式 中间遇到很多坑,解决方法都写这里了DeepSpeed 部署中bug以及解决方法 环境 基于阿里云GPU 云服务器部署实践 操作系统版本: Ubuntu 18.04 GPU 驱动版本: 470.161.03 GPU 型号: A100-80G CPU &#…

投了上千简历,是Android岗位需求少?还是我的技术不行

作者:病鸡乱投医 作为一名Android开发人员,打开招聘网站是每天必做的事情。每次看到悬赏诱人的Android工程师职位,就想做个简历有技巧、能够吸引面试官的面面观。 然而,即使投了上千份简历,也迟迟没有找到理想的工作。…

makefile编译脚本,理解$@、$^和$<

一、理解 、 、 、^、$<的含义 Makefile中&#xff0c;格式为这样的 target : prerequisties 目标&#xff1a;需要依赖的条件 简单的工程直接这样 hello:hello.ccgcc hello.cc -o hello但如果文件多了呢&#xff1f;按部就班写会显得很长&#xff0c;所有这时候makefil…

惊现数据库误操作后,看这家银行如何打造“零盲区”运维安全

第三方运维人员数据库误操作致业务中断 堡垒机凸显短板 这家银行如何破局&#xff1f; 走在数字化转型前沿的银行业&#xff0c;不断增加的IT资产、业务系统&#xff0c;给IT运维提出了更高的挑战。银行运维的核心之一在于数据安全、系统稳定&#xff0c;面临着庞杂的运维场景…

【推荐系统】常用评价指标NDCG、HR、Recall、MRR解析

【推荐系统】常用评价指标NDCG、HR、Recall、MRR解析 文章目录 【推荐系统】常用评价指标NDCG、HR、Recall、MRR解析1. 准备工作2. 计算这些指标 &#xff08;5&#xff09;2.1 Accuracy&#xff08;准确率&#xff09;2.2 Recall&#xff08;召回率、查全率&#xff09;2.3 Pr…

【跟着陈七一起学C语言】今天总结:C语言的数组和指针

友情链接&#xff1a;专栏地址 知识总结顺序参考C Primer Plus&#xff08;第六版&#xff09;和谭浩强老师的C程序设计&#xff08;第五版&#xff09;等&#xff0c;内容以书中为标准&#xff0c;同时参考其它各类书籍以及优质文章&#xff0c;以至减少知识点上的错误&#x…