Istio分布式链路监控搭建:Jaeger与Zipkin

news2024/11/21 23:56:22

分布式追踪定义

分布式追踪是一种用来跟踪分布式系统中请求的方法,它可以帮助用户更好地理解、控制和优化分布式系统。分布式追踪中用到了两个概念:TraceID 和 SpanID。

TraceID 是一个全局唯一的 ID,用来标识一个请求的追踪信息。一个请求的所有追踪信息都属于同一个 TraceID,TraceID 在整个请求的追踪过程中都是不变的;

SpanID 是一个局部唯一的 ID,用来标识一个请求在某一时刻的追踪信息。一个请求在不同的时间段会产生不同的 SpanID,SpanID 用来区分一个请求在不同时间段的追踪信息;

TraceID 和 SpanID 是分布式追踪的基础,它们为分布式系统中请求的追踪提供了一个统一的标识,方便用户查询、管理和分析请求的追踪信息。

分布式追踪的过程:

当一个系统收到请求后,分布式追踪系统会为该请求分配一个 TraceID,用于串联起整个调用链;

分布式追踪系统会为该请求在系统内的每一次服务调用生成一个 SpanID 和 ParentID,用于记录调用的父子关系,没有 ParentID 的 Span 将作为调用链的入口;

每个服务调用过程中都要传递 TraceID 和 SpanID;

在查看分布式追踪时,通过 TraceID 查询某次请求的全过程;

2.Istio如何实现分布式追踪

Istio 中的分布式追踪是基于数据平面中的 Envoy 代理实现的。服务请求在被劫持到 Envoy 中后,Envoy 在转发请求时会附加大量 Header,Istio 通过在服务网格中自动注入代理(Envoy)来拦截服务间的通信。这些代理能够收集和传播追踪相关的上下文信息,如请求 ID、跨度(Span)等。分布式追踪的核心思想是跟踪一个请求在多个服务之间的流转过程,通过记录每个服务处理请求的时间跨度等信息,构建出完整的请求链路。

Envoy 会在 Ingress Gateway 中为你产生用于追踪的 Header,不论你的应用程序使用何种语言开发,Envoy 都会将这些 Header 转发到上游集群。但是,你还要对应用程序代码做一些小的修改,才能为使用分布式追踪功能。这是因为应用程序无法自动传播这些 Header,可以在程序中集成分布式追踪的 Agent,或者在代码中手动传播这些 Header。Envoy 会将追踪数据发送到 tracer 后端处理,然后就可以在 UI 中查看追踪数据了。

Istio-Jaeger

(1)Jaeger介绍

Jaeger是由Uber开源的分布式追踪系统,它采用Go语言编写,主要借鉴了Google Dapper论文和Zipkin的设计,兼容OpenTracing以及Zipkin追踪格式,目前已经成为CNCF基金会的开源项目。

Istio和Jaeger可以无缝集成,通过Istio的Telemetry API,我们可以将分布式追踪数据发送到Jaeger进行展示和分析。

通过Istio和Jaeger的结合使用,我们可以轻松地实现微服务架构中的分布式追踪。这不仅有助于我们更好地监控和调试服务之间的调用关系,还可以帮助我们优化系统性能和提高可靠性。在实际应用中,我们可以根据具体需求对Istio和Jaeger进行配置和定制,以满足不同的业务场景和性能要求。

(2)Jaeger实施

搭建Istio网格服务,搭建过程省略

安装jaeger

在Istio的目录下存放了官方提供的jaeger的基础运行环境的yaml文件,该文件在samples/addons/jaeger.yaml

直接运行即可,为了访问可视化,将其service的port类型改为NodePort

apiVersion: v1

kind: Service

metadata:

  name: tracing

  namespace: istio-system

  labels:

    app: jaeger

spec:

  type: NodePort

  ports:

    - name: http-query

      port: 80

      protocol: TCP

      targetPort: 16686

    # Note: Change port name if you add '--query.grpc.tls.enabled=true'

    - name: grpc-query

      port: 16685

      protocol: TCP

      targetPort: 16685

  selector:

    app: jaeger

搭建jaeger

[root@master istio-1.17.3]# kubectl apply -f samples/addons/jaeger.yaml

deployment.apps/jaeger created

service/tracing created

service/zipkin created

service/jaeger-collector created

Jaeger搭建完成。部署Bookinfo进行测试:

Bookinfo 应用程序启动并运行时,访问 http://$GATEWAY_URL/productpage 一次或多次以生成追踪信息。

要查看追踪数据,必须向服务发送请求。请求的数量取决于 Istio 的采样率。 采样率在安装 Istio 时设置,默认采样速率为 1%。在第一个跟踪可见之前,您需要发送至少 100 个请求。 使用以下命令向 productpage 服务发送 100 个请求:

[root@master istio-1.17.3]# for i in `seq 1 100`; do curl -s -o /dev/null http://192.168.128.5:31870/productpage; done

此时进入jaeger的可视化界面进行查看

服务选择productpage.default选项进行FindTraces

页面信息有:

通过 “Lookup by Trace ID. About Jaeger v” 查找跟踪 ID。

显示了一个名为 “productpage e749dee” 的条目及相关信息,包括 “istio-ingressgateway.istio-system: productpage.default.svc.cluster.local.9080/” 等。

给出了 “Trace Start November 12 2024, 13:23:40.530 Duration 663.56ms” 的跟踪起始时间和持续时间。

列出了 “Services 5 Depth 6 Total Spans 8 165.89ms” 等不同阶段的时间信息。

展示了各个服务及操作的时间信息,如 “istio-ingressgateway.istio-system productpage default svc. dustet locat 908 productpage default productpage. default svc.cluster locat 900/productpage” 以及对应的时间如 “2.86ms”“2.31ms”“9ms”“633.09ms”“17.73ms”“781usl”。

Istio-zipkin

Istio-Zipkin

Zipkin介绍 

Zipkin是 Twitter 的一个开源项目,它基于Google Dapper实现,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储展现、查找和我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的REST API接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序,从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源,除了面向开发的 API 接口之外,它也提供了方便的UI组件来帮助我们直观的搜索跟踪信息和分析请求链路明细,比如:可以查询某段时间内各用户请求的处理时间等。

Zipkin搭建

在Istio的拓展文件中存放了Zipkin的yanl文件,执行即可

apiVersion: apps/v1

kind: Deployment

metadata:

  name: zipkin

  namespace: istio-system

  labels:

    app: zipkin

spec:

  selector:

    matchLabels:

      app: zipkin

  template:

    metadata:

      labels:

        app: zipkin

        sidecar.istio.io/inject: "false"

    spec:

      containers:

        - name: zipkin

          image: openzipkin/zipkin-slim:2.23.14

          env:

            - name: STORAGE_METHOD

              value: "mem"

          readinessProbe:

            httpGet:

              path: /health

              port: 9411

            initialDelaySeconds: 5

            periodSeconds: 5

---

apiVersion: v1

kind: Service

metadata:

  name: tracing

  namespace: istio-system

  labels:

    app: zipkin

spec:

  type: NodePort

  ports:

    - name: http-query

      port: 80

      protocol: TCP

      targetPort: 9411

  selector:

    app: zipkin

---

apiVersion: v1

kind: Service

metadata:

  labels:

    name: zipkin

  name: zipkin

  namespace: istio-system

spec:

  ports:

    - port: 9411

      targetPort: 9411

      name: http-query

  selector:

    app: zipkin

Zipkin服务启动成功,查看服务

部署Bookinfo服务进行测试

浏览器访问:http://192.168.128.5:30987/

[root@master istio-1.17.3]# for i in `seq 1 100`; do curl -s -o /dev/null http://192.168.128.5:30093/productpage; done

查看zipkin界面:

追踪由一组 Span 组成,其中每个 Span 对应一个 Bookinfo Service,这些服务在执行 /productpage 请求或 Istio 内部组件时被调用,例如:istio-ingressgateway。

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

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

相关文章

Linux修改/etc/hosts不起作用(ping: xxx: Name or service not known)的解决方法——开启NSCD

​ 问题描述 起因是我在实验室云资源池的一台虚拟机(CentOS 8.5)上的/etc/hosts文件中为Fabric网络节点的域名指定了IP: IP可以ping通,但是ping域名时提示ping: xxx: Name or service not known。 问题本身应该是Linux通用的&a…

Python中Tushare(金融数据库)入门详解

文章目录 Python中Tushare(金融数据库)入门详解一、引言二、安装与注册1、安装Tushare2、注册与获取Token 三、Tushare基本使用1、设置Token2、获取数据2.1、获取股票基础信息2.2、获取交易日历2.3、获取A股日线行情2.4、获取沪股通和深股通成份股2.5、获…

【网络】网络抓包与协议分析

网络抓包与协议分析 一. 以太网帧格式分析 这是以太网数据帧的基本格式,包含目的地址(6 Byte)、源地址(6 Byte)、类型(2 Byte)、数据(46~1500 Byte)、FCS(4 Byte)。 Mac 地址类型 分为单播地址、组播地址、广播地址。 单播地址:是指第一个字节的最低位…

RabbitMQ的工作队列在Spring Boot中实现(详解常⽤的⼯作模式)

上文着重介绍RabbitMQ 七种工作模式介绍RabbitMQ 七种工作模式介绍_rabbitmq 工作模式-CSDN博客 本篇讲解如何在Spring环境下进⾏RabbitMQ的开发.(只演⽰部分常⽤的⼯作模式) 目录 引⼊依赖 一.工作队列模式 二.Publish/Subscribe(发布订阅模式) …

python学习_3.正则表达式

来源:B站/麦叔编程 1. 正则表达式的7个境界 假设有一段文字: text 身高:178,体重:168,学号:123456,密码:9527要确定文本中是否包含数字123456,我们可以用in运算符,也可以使用inde…

Python学习------第十天

数据容器-----元组 定义格式,特点,相关操作 元组一旦定义,就无法修改 元组内只有一个数据,后面必须加逗号 """ #元组 (1,"hello",True) #定义元组 t1 (1,"hello") t2 () t3 tuple() prin…

nodejs基于微信小程序的云校园的设计与实现

摘 要 相比于传统的校园管理方式,智能化的管理方式可以大幅提高校园的管理效率,实现了云校园管理的标准化、制度化、程序化的管理,有效地防止了云校园信息的不规范管理,提高了信息的处理速度和精确度,能够及时、准确地…

Excel——宏教程(精简版)

一、宏的简介 1、什么是宏? Excel宏是一种自动化工具,它允许用户录制一系列操作并将其转换为VBA(Visual Basic for Applications)代码。这样,用户可以在需要时执行这些操作,以自动化Excel任务。 2、宏的优点 我们可以利用宏来…

绿光一字线激光模组:工业制造与科技创新的得力助手

在现代工业制造和科技创新领域,绿光一字线激光模组以其独特的性能和广泛的应用前景,成为了不可或缺的关键设备。这种激光模组能够发射出一条明亮且精确的绿色激光线,具有高精度、高稳定性和长寿命的特点,为各种精密加工和测量需求…

Python Turtle绘图:重现汤姆劈树的经典瞬间

Python Turtle绘图:重现汤姆劈树的经典瞬间 🦀 前言 🦀🐞往期绘画🐞🐋 效果图 🐋🐉 代码 🐉 🦀 前言 🦀 《汤姆与杰瑞》(Tom and Jerr…

Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(二)

Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案https://blog.csdn.net/shijianduan1/article/details/133386281 某业务配置表,按配置的时间区间及组织层级取方案,形成报表展示出所有部门方案的取值; 例如&#xff0…

DataGear 5.2.0 发布,数据可视化分析平台

DataGear 企业版 1.3.0 已发布,欢迎体验! http://datagear.tech/pro/ DataGear 5.2.0 发布,图表插件支持定义依赖库、严重 BUG 修复、功能改进、安全增强,具体更新内容如下: 重构:各模块管理功能访问路径…

详解八大排序(一)------(插入排序,选择排序,冒泡排序,希尔排序)

文章目录 前言1.插入排序(InsertSort)1.1 核心思路1.2 实现代码 2.选择排序(SelectSort)2.1 核心思路2.2 实现代码 3.冒泡排序(BubbleSort)3.1 核心思路3.2 实现代码 4.希尔排序(ShellSort&…

02 —— Webpack 修改入口和出口

概念 | webpack 中文文档 | webpack中文文档 | webpack中文网 修改入口 webpack.config.js (放在项目根目录下) module.exports {//entry设置入口起点的文件路径entry: ./path/to/my/entry/file.js, }; 修改出口 webpack.config.js const path r…

《InsCode AI IDE:编程新时代的引领者》

《InsCode AI IDE:编程新时代的引领者》 一、InsCode AI IDE 的诞生与亮相二、独特功能与优势(一)智能编程体验(二)多语言支持与功能迭代 三、实际应用与案例(一)游戏开发案例(二&am…

ubuntu 16.04 中 VS2019 跨平台开发环境配置

su 是 “switch user” 的缩写,表示从当前用户切换到另一个用户。 sudo 是 “superuser do” 的缩写,意为“以超级用户身份执行”。 apt 是 “Advanced Package Tool” 的缩写,Ubuntu中用于软件包管理的命令行工具。 1、为 root 用户设置密码…

[Docker#11] 容器编排 | .yml | up | 实验: 部署WordPress

目录 1. 什么是 Docker Compose 生活案例 2. 为什么要使用 Docker Compose Docker Compose 的安装 Docker Compose 的功能 使用步骤 核心功能 Docker Compose 使用场景 Docker Compose 文件(docker-compose.yml) 模仿示例 文件基本结构及常见…

C++时间复杂度与空间复杂度

一、时间复杂度(Time Complexity) 1. 概念 时间复杂度是用来衡量算法运行时间随着输入规模增长而增长的量级。它主要关注的是算法执行基本操作的次数与输入规模之间的关系,而非具体的运行时间(因为实际运行时间会受硬件、编程语…

【Linux】【Shell】Shell 基础与变量

Shell 基础 Shell 基础查看可用的 Shell判断当前 Shell 类型 变量环境变量查看环境变量临时环境变量永久环境变量PATH 变量 自定义变量特殊赋值(双引号、单引号、反撇号) 预定义变量bashrc Shell 基础 Shell 是一个用 C 语言编写的程序,相当于是一个翻译&#xff0c…

【SpringBoot】26 实体映射工具(MapStruct)

Gitee 仓库 https://gitee.com/Lin_DH/system 介绍 现状 为了让应用程序的代码更易于维护,通常会将项目进行分层。在《阿里巴巴 Java 开发手册》中,推荐分层如下图所示: 每层都有对应的领域模型,即不同类型的 Bean。 DO&…