开源分布式系统追踪-01-Zipkin-01-入门介绍

分布式跟踪系列

CAT

cat monitor 分布式监控 CAT-是什么?

cat monitor-02-分布式监控 CAT埋点

cat monitor-03-深度剖析开源分布式监控CAT

cat monitor-04-cat 服务端部署实战

cat monitor-05-cat 客户端集成实战

cat monitor-06-cat 消息存储

skywalking

监控-skywalking-01-APM 监控入门介绍

监控-skywalking-02-深入学习 skywalking 的实现原理的一些问题

监控-skywalking-03-深入浅出介绍全链路跟踪

监控-skywalking-04-字节码增强原理

监控-skywalking-05-in action 实战笔记

监控-skywalking-06-SkyWalking on the way 全链路追踪系统的建设与实践

其他

开源分布式系统追踪-00-overview

开源分布式系统追踪-01-Zipkin-01-入门介绍

开源分布式系统追踪 02-pinpoint-01-入门介绍

开源分布式系统追踪-03-CNCF jaeger-01-入门介绍

Zipkin

Zipkin 是一种分布式跟踪系统。它有助于收集解决微服务架构中的延迟问题所需的时序数据。它管理这些数据的收集和查找。

Zipkin的设计基于Google Dapper论文。

应用程序用于向Zipkin报告时序数据。

Zipkin UI还提供了一个依赖关系图,显示了每个应用程序通过的跟踪请求数。如果要解决延迟问题或错误,可以根据应用程序,跟踪长度,注释或时间戳对所有跟踪进行筛选或排序。选择跟踪后,您可以看到每个跨度所需的总跟踪时间百分比,从而可以识别问题应用程序。

zipkin

快速开始

在本节中,我们将逐步构建并启动Zipkin实例,以便在本地检查Zipkin。

有三个选项:使用Java,Docker或从源代码运行。

如果您熟悉Docker,这是首选的方法。如果您不熟悉Docker,请尝试通过Java或源代码运行。

无论您如何启动Zipkin,请浏览 http://your_host:9411 以查找跟踪!

Docker

Docker Zipkin项目能够构建docker镜像,提供脚本和docker-compose.yml,用于启动预构建的图像。

  • 拉取镜像
docker pull openzipkin/zipkin

最快的开始是直接运行最新的图像:

docker run -d -p 9411:9411 openzipkin/zipkin

java

jdk8+ 以上安装,直接运行:

curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar

使用源码编译运行

# get the latest source
git clone https://github.com/openzipkin/zipkin
cd zipkin
# Build the server and also make its dependencies
./mvnw -DskipTests --also-make -pl zipkin-server clean install
# Run the server
java -jar ./zipkin-server/target/zipkin-server-*exec.jar

Architecture

概览

跟踪器存在于您的应用程序中,并记录有关发生的操作的时间和元数据。他们经常使用库,因此它们的使用对用户是透明的。

例如,检测的Web服务器记录何时收到请求以及何时发送响应。收集的跟踪数据称为Span。

编写仪器是为了安全生产并且开销很小。出于这个原因,它们只在带内传播ID,告诉接收器正在进行跟踪。 Zipkin带外报告已完成的跨度,类似于应用程序异步报告度量标准的方式。

例如,在跟踪操作并且需要发出传出的http请求时,会添加一些标头来传播ID。标头不用于发送操作名称等详细信息。

将数据发送到Zipkin的检测应用程序中的组件称为Reporter。记者通过几种传输之一将跟踪数据发送到Zipkin收集器,这些收集器将跟踪数据保存到存储中。稍后,API会查询存储以向UI提供数据。

这是描述此流程的图表:

architecture-1.png

要查看您的平台是否已存在检测库,请参阅现有仪器列表。

Example Flow

如概述中所述,标识符是带内发送的,详细信息是带外发送给Zipkin的。

在这两种情况下,跟踪检测都负责创建有效的跟踪并正确呈现它们。

例如,跟踪器确保它在带内(下游)和带外(与Zipkin异步)发送的数据之间的奇偶校验。

这是一个示例序列的http跟踪,其中用户代码调用资源/ foo。

这导致单个跨度,在用户代码收到http响应后异步发送到Zipkin。

┌─────────────┐ ┌───────────────────────┐  ┌─────────────┐  ┌──────────────────┐
│ User Code   │ │ Trace Instrumentation │  │ Http Client │  │ Zipkin Collector │
└─────────────┘ └───────────────────────┘  └─────────────┘  └──────────────────┘
       │                 │                         │                 │
           ┌─────────┐
       │ ──┤GET /foo ├─▶ │ ────┐                   │                 │
           └─────────┘         │ record tags
       │                 │ ◀───┘                   │                 │
                           ────┐
       │                 │     │ add trace headers │                 │
                           ◀───┘
       │                 │ ────┐                   │                 │
                               │ record timestamp
       │                 │ ◀───┘                   │                 │
                             ┌─────────────────┐
       │                 │ ──┤GET /foo         ├─▶ │                 │
                             │X-B3-TraceId: aa │     ────┐
       │                 │   │X-B3-SpanId: 6b  │   │     │           │
                             └─────────────────┘         │ invoke
       │                 │                         │     │ request   │
                                                         │
       │                 │                         │     │           │
                                 ┌────────┐          ◀───┘
       │                 │ ◀─────┤200 OK  ├─────── │                 │
                           ────┐ └────────┘
       │                 │     │ record duration   │                 │
            ┌────────┐     ◀───┘
       │ ◀──┤200 OK  ├── │                         │                 │
            └────────┘       ┌────────────────────────────────┐
       │                 │ ──┤ asynchronously report span     ├────▶ │
                             │                                │
                             │{                               │
                             │  "traceId": "aa",              │
                             │  "id": "6b",                   │
                             │  "name": "get",                │
                             │  "timestamp": 1483945573944000,│
                             │  "duration": 386000,           │
                             │  "annotations": [              │
                             │--snip--                        │
                             └────────────────────────────────┘

运输

必须将从仪表化库中发送的跨度从被跟踪的服务传输到Zipkin收集器。有三种主要传输方式:HTTP,Kafka和Scribe。

组件

Zipkin有4个组件:

  • 集电极

  • 存储

  • 搜索

  • 网页用户界面

Zipkin收藏家

一旦跟踪数据到达Zipkin收集器守护程序,它就会被Zipkin收集器验证,存储和索引以供查找。

存储 Zipkin最初是为了在Cassandra上存储数据而构建的,因为Cassandra是可扩展的,具有灵活的模式,并且在Twitter中大量使用。但是,我们使这个组件可插拔。除了Cassandra,我们原生支持ElasticSearch和MySQL。其他后端可能会作为第三方扩展提供。

Zipkin查询服务 一旦数据被存储和索引,我们需要一种方法来提取它。查询守护程序提供了一个简单的JSON API,用于查找和检索跟踪。此API的主要使用者是Web UI。

Web UI 我们创建了一个GUI,它为查看跟踪提供了一个很好的界面。 Web UI提供了一种基于服务,时间和注释查看跟踪的方法。注意:UI中没有内置身份验证!

Data Model

请注意,此页面已过期。请查看Zipkin Api文档,该文档详细说明了模型中的字段,直到此页面更新为止。

为了说明Zipkin显示的跟踪数据,让我们将它与Zipkin数据模型中的等效信息联系起来。

通过比较这些,我们看到了

  1. 入站和出站请求的跨度不同

  2. 包含cs的跨度可以记录它们的去向

当目标协议不是Zipkin检测时,例如MySQL,这会有所帮助。 首先,我们看到Zipkin跟踪查看器中显示的一条跟踪:

json_zipkin_screenshot.png

检测库

这是一个高级主题。在进一步阅读之前,您可能需要检查平台的检测库是否已存在。

如果没有,如果你想创建一个仪器库,首先要做的事情;跳过Zipkin Gitter聊天频道,告诉我们。我们非常乐意为您提供帮助。

instrumenting

参考资料

Zipkin

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决Jmeter HTTP Cookie管理器cookie不生效

解决Jmeter HTTP Cookie管理器cookie不生效问题 解决Jmeter HTTP Cookie管理器cookie不生效问题1、设置Jmeter HTTP Cookie管理器cookie后,发起的请求显示[no cookies]jmeter问题复现:这里同样使用postman进行重试,发现是可以正常获取数据的&…

【6】数据分析检测(DataFrame 1)

学习目标3 昨天,我们学习了Series。 而Pandas的另一种数据类型:DataFrame,在许多特性上和Series有相似之处。 今天,我们将学习DataFrame的相关知识: 1. DataFrame的概念 2. 构造一个DataFrame 3. DataFrame的常用…

LeetCode 热题 100_环形链表 II(26_142_中等_C++)(单链表;哈希表;快慢指针)

LeetCode 热题 100_环形链表 II(26_142) 题目描述:输入输出样例:题解:解题思路:代码实现(思路一(哈希表)):代码实现(思路二&#xff0…

如何通过看板进行跨境电商的圣诞商品数据分析与优化选品流程?

引言 随着圣诞季的临近,跨境电商迎来了重要的销售时机。选品工作对于跨境电商的成功至关重要,直接关系到销售业绩和利润。本文结合相关网页信息,深入探讨跨境电商在圣诞期间如何利用信息整合工具展开选品工作,并优化选品流程。同…

PHP开发设计模式:单例模式

PHP开发设计模式:单例模式 特点: 三私一公:私有的静态变量(存放实例),私有的构造方法(防止创建实例),私有的克隆方法 (防止克隆对象),公有的静态方法&#…

使用HTML获取商品详情:技术实现与最佳实践

1. 引言 在电子商务领域,获取商品详情是提升用户体验和增强网站功能性的关键。本文将探讨如何使用HTML结合其他技术手段获取商品详情,并展示如何将这些信息有效地呈现给用户。 2. 理解商品详情页面的结构 在开始编码之前,我们需要了解商品…

MR30分布式IO在新能源领域加氢站的应用

导读 氢能被誉为21世纪最具发展潜力的清洁能源,氢能科技创新和产业发展持续得到各国青睐。氢能低碳环保,燃烧的产物只有水,是用能终端实现绿色低碳转型的重要载体。氢能产业链分别为上游制氢、中游储运以及下游用氢。上游制氢工艺目前大部分…

WEB安全基础知识

WAF全称为Web Application Firewall(网页应用防火墙)是一种专门设计用来保护web应用免受各种网络攻击的安全防护措施。它位于客户端与服务器之间,监控和过滤HTTP流量,从而拦截恶意请求、识别并防御常见的web攻击。 WAF的主要功能…

【数据结构】B树家族解析:B树、B+树与B*树的理论与B树插入实现(C++)

文章目录 一、常见的搜索结构二、B树2.1 B树概念2.2 开销 三、代码实现3.1 B树节点的设计3.2 B树设计3.3 插入操作实现1. 查找插入位置(Find 函数)2. 插入关键字到节点(InsertKey 函数)3. 处理节点分裂(Insert 函数&am…

protobuf c++开发快速上手指南

1、环境准备 在c环境使用 protobuf,需要安装protobuf runtime以及protobuf的编译器:protoc,其作用如下表格: 需要安装的环境作用protoc将proto文件编译成c源码protobuf runtime编译c源码需要链接到protobuf库 注意:…

【实践·专业课】内存管理-存储管理-文件系统

1. 基于Linux的简单区块链实现 1.1. 环境准备 确保使用的 Linux 系统(如 Ubuntu、CentOS 等)已安装 Python 3。 在终端输入python3命令,若出现 Python 解释器的版本信息等提示,则表示已安装; 若提示未找到命令&…

科技潮头浪接天,一桥飞架两界连。EthernetIP转Profinet互译连

本案例介绍的是西门子1200PLC通过稳联技术PROFINET转EtherNetIP网关(WL-ABC2006)连接HCS-6100系统配置案例。 打开稳联技术Ethernetip转profient网关(WL-ABC2006)配置软件,因为网关作为EtherNetIP从站,所以选择PN2EIP。设置网关Pr…

【网络篇】TCP知识

TCP首部格式? 为什么需要 TCP 协议? TCP 工作在哪一层? IP 层是不可靠的,它不保证网络包的交付、不保证网络包的按序交付也不保证网络包中的数据的完整性。如果需要保障网络数据包的可靠性,那么就需要由上层&#xff0…

PDFMathTranslate,PDF多语言翻译,批量处理,学术论文,双语对照(WIN/MAC)

分享一个非常实用的PDF文档翻译项目——PDFMathTranslate。作为一个经常逛GitHub的开发者,我总喜欢翻看各种项目附带的论文,虽然大多时候是瞎研究,但却乐在其中。该项目能够完美保留公式、图表、目录和注释,对于需要阅读外文文献的…

Ape-DTS:开源 DTS 工具,助力自建 MySQL、PostgreSQL 迁移上云

Ape-DTS 是一款高效、轻量级且功能强大的开源工具,专注于解决数据迁移、同步、校验、订阅与加工的需求。无论是将自建的 MySQL/PostgreSQL 数据库迁移到云端,还是在不同数据库间进行数据迁移,Ape-DTS 都能为您提供便捷且可靠的解决方案。它特…

【经典论文阅读】Latent Diffusion Models(LDM)

Latent Diffusion Models High-Resolution Image Synthesis with Latent Diffusion Models 摘要 动机:在有限的计算资源下进行扩散模型训练,同时保持质量和灵活性 引入跨注意力层,以卷积方式实现对一般条件输入(如文本或边界框…

使用torch模拟 BMM int8量化计算。

使用torch模型BMM int8计算。 模拟:BMM->softmax->BMM 计算流程 import torch import numpy as np torch.manual_seed(777) def int8_quantize_per_token(x: torch.Tensor, axis: int -1, attnsFalse):if x.dtype ! torch.float32:x x.type(torch.float32)…

Leetcode 每日一题 219.存在重复元素 II

目录 问题描述 输入输出格式 示例 算法分析 过题图片 代码实现 复杂度分析 题目链接 总结 问题描述 给定一个整数数组nums和一个整数k&#xff0c;我们需要判断数组中是否存在两个不同的索引i和j&#xff0c;使得nums[i] nums[j]且|i - j| < k。如果存在这样的i和…

ragflow连不上ollama的解决方案

由于前期wsl默认装在C盘&#xff0c;后期部署好RagFlow后C盘爆红&#xff0c;在连接ollama的时候一直在转圈圈&#xff0c;问其他人没有遇到这种情况&#xff0c;猜测是因为内存不足无法加载模型导致&#xff0c;今天重新在E盘安装wsl 使用wsl装Ubuntu Win11 wsl-安装教程 如…

PR的选择与移动

选择工具 可以选择序列上的剪辑&#xff0c;如果需要多选可以按住shift键选中多个剪辑 CtrlA&#xff1a;可以进行全选 编组 选中多个剪辑后“右键-编组“可以将所选的剪辑连接在一起。这时单击任意剪辑都可以选中全部 向前选择轨道工具与向后选择轨道工具 向前选择轨道工具…