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】链路追踪相关推荐

  1. SpringCloud微服务架构,Config 分布式配置中心,Bus 消息总线, Stream 消息驱动,Sleuth+Zipkin 链路追踪

    Config分布式配置中心 Config 概述 概述 • Spring Cloud Config 解决了在分布式场景下多环境配置文件的管理和维护. • 好处: • 集中管理配置文件 • 不同环境不同配 ...

  2. Zipkin链路追踪

    Zipkin链路追踪技术分享 什么是Zipkin Zipkin 是 Twitter 的一个开源项目,它基于 Google Dapper 实现,它致力于收集服务的定时数据,以 解决微服务架构中的延迟问题 ...

  3. Spring cloud(Finchley)微服务框架,sleuth整合zipkin链路追踪失效的问题

    一.首先说问题: 1.springCloud在使用链路追踪组件sleuth整合zipkin的过程中链路追踪信息切都是正常: 2.微服务太多需要使用组件Config对每个微服务的的配置文件进行统一管理: ...

  4. zipkin链路追踪详解

    服务链路追踪(Spring Cloud Sleuth) sleuth:英 [slu:θ] 美 [sluθ] n.足迹,警犬,侦探vi.做侦探 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布 ...

  5. sleuth+zipkin链路追踪

    sleuth+zipkin大致工作图: sleuth: 有以下术语: Span:基本工作单元,例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标 ...

  6. Sleuth+Zipkin 链路追踪

    源码:https://gitee.com/GXQ205153964/sleuth-parent.git 简介: Spirng Cloud Sleuth 其实是个工具,它在整个分布式系统中能跟踪一个用户 ...

  7. springboot 之 微服务调用 之 链路追踪

    说明:本文来自 本篇主要内容 一.为什么要用链路追踪? 1.1 因:拆分服务单元 微服务架构其实是一个分布式的架构,按照业务划分成了多个服务单元. 由于服务单元的数量是很多的,有可能几千个,而且业务也 ...

  8. SpringCloud 2020版本教程4:使用spring cloud sleuth+zipkin实现链路追踪

    点击关注公众号,Java干货及时送达 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可. 微服 ...

  9. 分布式链路追踪zipkin

    分布式链路追踪 分布式链路追踪最早由谷歌的Dapper论文中提出的,提供提供简单易用的API来记录不同系统之间的调用的链路及耗时情况,从而提供各个系统的性能分析的依据. Dapper论文概述 Dapp ...

  10. Spring Cloud搭建微服务架构----使用Zipkin做服务链路追踪

    2019独角兽企业重金招聘Python工程师标准>>> 实例主要有三个工程组成: Server-zipkin:通过ZipkinServer功能,实现收集调用数据,展示: Servic ...

最新文章

  1. 赤兔四足机器人的作用_腾讯 Robotics X 实验室四足移动机器人Jamoca首亮相,可挑战高难度梅花桩...
  2. 观察:谁能拯救视频平台的高昂带宽成本?
  3. OData元数据在浏览器里以Feed视图显示的解决办法
  4. 客户端更新功能实现_exlive1.0|监控客户端功能更新
  5. 采用python解决实际问题_应用 Python 解决一些实际问题
  6. python request headers获取_Python爬虫实战—— Request对象之header伪装策略
  7. php rabbitmq延迟队列示例
  8. 自定义帆软报表的导出
  9. 直流调速器(有刷电调)的工作原理
  10. 2018-3-10 unset 变量 ab测试
  11. 计算机获取信息的过程是,“获取信息的过程与方法”的教学案例
  12. 第三代USRP 产品对比
  13. 页码在html中怎么设置,如何设置网页打印的网址、日期、页码等?
  14. 无人机飞控技术-市场现状及未来发展趋势
  15. python使用matplotlib画折线图(详细)
  16. HDU 5761 多校联合 Rower BO
  17. Android 面试必备之 JVM 相关口水话,flutterpageview动画
  18. 【项目分享】使用 PointNet 进行点云分割
  19. angularjs修改html标签,angularjs sanitize+ng-bind-html内置指令做html标签转义
  20. 那年生活在杭州的味道

热门文章

  1. linux whois工具,Linux whois命令
  2. class 第一个元素_selenium之元素定位方式
  3. 【TensorFlow】TensorFlow从浅入深系列之二 -- 教你通过思维导图深度理解深层神经网络
  4. 【OpenCV】OpenCV函数精讲之 -- 命名空间
  5. 展望 | 2020年人工智能八大趋势
  6. 深度学习时代的计算机视觉
  7. Bezier(贝塞尔)曲线的轨迹规划在自动驾驶中的应用(三)
  8. linux下拨号时间,linux下拨号上网
  9. grails安装部署_grails中文版
  10. ROS官网新手级教程总结