【zipkin】链路追踪
1,安装zipkin:https://zipkin.io/pages/quickstart.html
推荐使用docker去安装zipkin服务,下载安装执行都有了。缺点是下载要等待一段时间
2,使用php来构造tracing数据,投递给zipkin
用的包是:https://github.com/jcchavezs/zipkin-php
安装推荐使用composer,找个空目录直接执行composer命令就好
实战1:demo先跑起来
<?php require "vendor/autoload.php";use Zipkin\Annotation; use Zipkin\Endpoint; use Zipkin\Samplers\BinarySampler; use Zipkin\TracingBuilder; use Zipkin\Reporters\Http;$endpoint = Endpoint::createFromGlobals();$reporter = new Http(); $sampler = BinarySampler::createAsAlwaysSample(); $tracing = TracingBuilder::create()->havingLocalEndpoint($endpoint)->havingSampler($sampler) ->havingReporter($reporter)->build(); $tracer = $tracing->getTracer();$span = $tracer->newTrace(); $span->setName("encode"); $span->start(); try {usleep(100000);} finally {$span->finish(); }$tracer->flush();
执行以上脚本,打开zipkin的查看界面:127.0.0.1:9411,找到cli然后可以看到一条追踪记录。
可以看到zipkin的查看界面中多了条tracing记录。
这里需要解释下图中的东西:
1,cli:是serviceName,对应于你的服务名称(比如图片服务等)
2,执行时间:100ms,对应这次服务时间,从请求到相应是100ms;
3,encode;这个表示span的名称,span在zipkin的函数是某个节点(或者记录),和html的span有类似的含义。是个树状结构,可以有平级兄弟,和父子节点。
再次解释下图中的东西和原始数据的关系:
1,cli是serviceName,它是在这个动作中埋入的:Endpoint::createFromGlobals(),可以看到源码中有:new self(PHP_SAPI, ...);
2,执行时间:100ms,对应到usleep函数;
3,encode:是span的名称,对应的函数是setName()操作。
然后我们来分析下tracing主要做的事情:
1,在每个节点处(span)打点,初始化时设置context上下文(暂时忽略这个概念),name(span名称);
2,span节点开始时执行start操作,记录当前时间戳;
3,span节点结束时执行finish操作,记录结束时间戳;
这样就产生了一条span记录,包含:context,span-name,start-time,end-time。
然后我们再理解下context有哪些数据项。
traceId:追踪链的根节点id,刚才说span是树状结构,那么就需要个根节点id,类似于root-id;
spanId:当前span节点的id,和树的node-id是类似的;
parentId:当前span的父节点id,和树的parent-id是类似的;
context中可以设置traceId,和parentId,需要上下文传递过来,接下来有具体的例子来设置span的context。
spanId如何设置的呢?$tracer->newTrace() 这个操作是生成一个新的span节点,生成节点时会先生成TraceContext,同步会初始化spanId。
实战2:生成父子节点,生成兄弟节点
<?php require "vendor/autoload.php";use Zipkin\Annotation; use Zipkin\Endpoint; use Zipkin\Samplers\BinarySampler; use Zipkin\TracingBuilder; use Zipkin\Reporters\Http;$endpoint = Endpoint::createFromGlobals(); $endpoint = Endpoint::create("php-demo");$reporter = new Http(); $sampler = BinarySampler::createAsAlwaysSample(); $tracing = TracingBuilder::create()->havingLocalEndpoint($endpoint)->havingSampler($sampler) ->havingReporter($reporter)->build();$tracer = $tracing->getTracer();$span = $tracer->newTrace(); $span->setName("encode"); $span->start(); try {$parentContext = $span->getContext();$childSpan = $tracer->newChild($parentContext);$childSpan->setName("encode1");$childSpan->start();usleep(100000);$childSpan->finish();$childSpan2 = $tracer->newChild($parentContext);$childSpan2->setName("encode2");$childSpan2->start();usleep(100000);$childSpan2->finish(); } finally {$span->finish(); }$tracer->flush();
zipkin的追踪结果:
可以看到有三个span,encode是根节点,有两个儿子(encode1和encode2)。
重点就是newChild($parentContext),把父节点的信息传入到新的span节点就能实现两者之间的对应关系了。
相关的文章链接:
zipkin核心数据结构:https://my.oschina.net/guol/blog/871678
zipkin api接口:https://zipkin.io/zipkin-api/#/default/post_spans
zipkin api文档:https://github.com/openzipkin/zipkin-api/blob/master/zipkin-api.yaml#L56
jwt入门介绍:https://www.cnblogs.com/zaixiuxing/p/6005968.html
golang body长度:https://stackoverflow.com/questions/43021058/golang-read-request-body
转载于:https://www.cnblogs.com/helww/p/8438502.html
【zipkin】链路追踪相关推荐
- SpringCloud微服务架构,Config 分布式配置中心,Bus 消息总线, Stream 消息驱动,Sleuth+Zipkin 链路追踪
Config分布式配置中心 Config 概述 概述 • Spring Cloud Config 解决了在分布式场景下多环境配置文件的管理和维护. • 好处: • 集中管理配置文件 • 不同环境不同配 ...
- Zipkin链路追踪
Zipkin链路追踪技术分享 什么是Zipkin Zipkin 是 Twitter 的一个开源项目,它基于 Google Dapper 实现,它致力于收集服务的定时数据,以 解决微服务架构中的延迟问题 ...
- Spring cloud(Finchley)微服务框架,sleuth整合zipkin链路追踪失效的问题
一.首先说问题: 1.springCloud在使用链路追踪组件sleuth整合zipkin的过程中链路追踪信息切都是正常: 2.微服务太多需要使用组件Config对每个微服务的的配置文件进行统一管理: ...
- zipkin链路追踪详解
服务链路追踪(Spring Cloud Sleuth) sleuth:英 [slu:θ] 美 [sluθ] n.足迹,警犬,侦探vi.做侦探 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布 ...
- sleuth+zipkin链路追踪
sleuth+zipkin大致工作图: sleuth: 有以下术语: Span:基本工作单元,例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标 ...
- Sleuth+Zipkin 链路追踪
源码:https://gitee.com/GXQ205153964/sleuth-parent.git 简介: Spirng Cloud Sleuth 其实是个工具,它在整个分布式系统中能跟踪一个用户 ...
- springboot 之 微服务调用 之 链路追踪
说明:本文来自 本篇主要内容 一.为什么要用链路追踪? 1.1 因:拆分服务单元 微服务架构其实是一个分布式的架构,按照业务划分成了多个服务单元. 由于服务单元的数量是很多的,有可能几千个,而且业务也 ...
- SpringCloud 2020版本教程4:使用spring cloud sleuth+zipkin实现链路追踪
点击关注公众号,Java干货及时送达 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可. 微服 ...
- 分布式链路追踪zipkin
分布式链路追踪 分布式链路追踪最早由谷歌的Dapper论文中提出的,提供提供简单易用的API来记录不同系统之间的调用的链路及耗时情况,从而提供各个系统的性能分析的依据. Dapper论文概述 Dapp ...
- Spring Cloud搭建微服务架构----使用Zipkin做服务链路追踪
2019独角兽企业重金招聘Python工程师标准>>> 实例主要有三个工程组成: Server-zipkin:通过ZipkinServer功能,实现收集调用数据,展示: Servic ...
最新文章
- 赤兔四足机器人的作用_腾讯 Robotics X 实验室四足移动机器人Jamoca首亮相,可挑战高难度梅花桩...
- 观察:谁能拯救视频平台的高昂带宽成本?
- OData元数据在浏览器里以Feed视图显示的解决办法
- 客户端更新功能实现_exlive1.0|监控客户端功能更新
- 采用python解决实际问题_应用 Python 解决一些实际问题
- python request headers获取_Python爬虫实战—— Request对象之header伪装策略
- php rabbitmq延迟队列示例
- 自定义帆软报表的导出
- 直流调速器(有刷电调)的工作原理
- 2018-3-10 unset 变量 ab测试
- 计算机获取信息的过程是,“获取信息的过程与方法”的教学案例
- 第三代USRP 产品对比
- 页码在html中怎么设置,如何设置网页打印的网址、日期、页码等?
- 无人机飞控技术-市场现状及未来发展趋势
- python使用matplotlib画折线图(详细)
- HDU 5761 多校联合 Rower BO
- Android 面试必备之 JVM 相关口水话,flutterpageview动画
- 【项目分享】使用 PointNet 进行点云分割
- angularjs修改html标签,angularjs sanitize+ng-bind-html内置指令做html标签转义
- 那年生活在杭州的味道