zipkin原理解析和php代码实现(基于zipkin-api)

本文深入解析zipkin的跟踪原理,重点围绕trace_id、span_id和parent_id,阐述它们如何构建请求链路。同时,介绍如何在PHP中通过zipkin-api手动实现跟踪,提供示例代码展示如何发送跟踪数据。最后,展示了zipkin的请求时间图和服务依赖关系图,帮助读者直观理解其功能。
摘要由CSDN通过智能技术生成

zipkin跟踪原理解析

  • 主要原理: 核心参数为 trace_id , id(当前的span的id) ,和 parent_id(前一个span的id组成)。
  • trace_id : 整个请求链的唯一id,只要请求的trace_id 相同,不管相隔多长时间,zipkin都会归类到同一个链路中
  • id(span_id): 在同一个请求链路下的单个请求(跟踪)的唯一id,span_id一般是不相同的
  • parent_id(parent_span_id): 本次请求的上一个请求,这个是用于跟踪请求链中的每个请求之间的联系,zipkin可根据这个上下级的id关系生成服务依赖关系图
  • 可以通过下面的结构查看到跟踪关系(测试数据的111 调用 222 ,222 调用 333,此段数据可以在下面的示例代码中生成)
zipkin中存储的数据结构示例
[
  {
    "traceId": "b7794163e2432bf0",
    "id": "d4976a1d6eb10c24",
    "name": "service_aaaa",
    "timestamp": 1559123832737078,
    "duration": 100,
    "localEndpoint": {
      "serviceName": "1111"
    },
    "remoteEndpoint": {
      "serviceName": "2222"
    },
    "debug": true
  },
  {
    "traceId": "b7794163e2432bf0",
    "parentId": "d4976a1d6eb10c24",
    "id": "ba7f99539c4e2b53",
    "name": "service_aaaa",
    "timestamp": 1559123832791081,
    "duration": 100,
    "localEndpoint": {
      "serviceName": "2222"
    },
    "remoteEndpoint": {
      "serviceName": "3333"
    },
    "debug": true
  }
]

zipkin-api的使用

  • zipkin官方提供了好多sdk,有java,go,php等,里面涉及到很多header传播必要参数,可是,我一直没有接入成功过

  • 既然sdk无法成功,我们可以采用最原始的方法,调用zipkin的sdk去进行跟踪,还好,官方项目提供了详细的api: api地址,全部复制后放入在线swagger编辑器即可查看,有了api,我们只要按照api的要求,把供zipkin跟踪的必要参数通过http的形式发送到zipkin,就算大功告成了。

  • sdk 帮我们处理了相关参数的传播,主要包括 trace_id ,parent_span_id 的传播和自动组装,遇到问题很难调试(本人愚钝,一直没接入成功过)。当然,在理解zipkin的数据结构和原理的时候,这些自己处理也不是很难的事情

  • 下面的示例代码简单的模拟向zipkin发送跟踪点的数据,基于,可参考下,生产环境能不能用不知道

<?php
namespace http;
/**
 *  文档 https://raw.githubusercontent.com/apache/incubator-zipkin-api/master/zipkin2-api.ya
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值