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

server/2024/12/15 21:08:31/

分布式跟踪系列

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">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


http://www.ppmy.cn/server/150440.html

相关文章

YZ系列工具之YZ11:VBA_窗体缩放

我给VBA下的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套一部VBA手册,教程分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的…

Vue八股青春版

前言:本文资料来自于web前端面试以及Vue的官方文档,对其中的信息做了更新和归纳。 对vue的理解 一、从历史说起 纯前端(静态)ASP和JSP (JavaHTML),不太灵活,服务端渲染JquerySPA …

【自动化】requirements.txt

1.是什么? 用于列出项目依赖的所有Python包及其版本。这使得其他开发者可以轻松地安装与你的项目兼容的环境,或者在不同的机器上复制相同的开发环境。 2.如何编写requirements.txt 手动创建 格式: 包名版本号 在终端home命令自动生成 创建r…

mysqlelasticsearch备份恢复

目录 1. mysql备份 1.1. 使用 mysqldump 命令备份整个数据库: 1.2. 备份特定表: 2. 恢复 MySQL 数据库 2.1. 使用备份文件恢复数据库: 3. 备份elasticsearch索引 3.1. 注册本次备份的存储路径 3.2. 查看当前备份快照信息 3.3. 备份索…

深入了解Text2SQL开源项目(Chat2DB、SQL Chat 、Wren AI 、Vanna)

深入了解Text2SQL开源项目(Chat2DB、SQL Chat 、Wren AI 、Vanna) 前言1.Chat2DB2.SQL Chat3.Wren AI4.Vanna 前言 在数据驱动决策的时代,将自然语言查询转化为结构化查询语言(SQL)的能力变得日益重要。无论是小型创业…

Leetcode经典题9--O(1)时间的插入,添加和获取随机元素

题目描述: 实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 …

【Linux服务器nginx前端部署详解】ubantu22.04,前端Vue项目dist打包

本文主要讲一下在Linux系统环境下(以ubantu22.04为例),如何用nginx部署前端Vue项目打包的dist静态资源。有些具体的命令就不展开讲了,可以自行查看其他博主的文章,我主要讲整体的步骤和思路。 一、ubantu系统安装ngin…

PyTorch基本使用-线性回归案例

文章目录 1. 训练模型步骤2. 训练模型API3. 训练模型 学习目标:掌握PyTorch构建线性回归模型相关API 1. 训练模型步骤 我们使用 PyTorch 的各个组件来构建线性回归的实现。在pytorch中进行模型构建的整个流程一般分为四个步骤: 准备训练数据集构建要使…