链路跟踪工具zipkin——k8s从入门到高并发系列教程(十四)

 ads:

关注以下公众号查看更多文章

    我们的项目包含基于yaf框架的test_api和test_client1微服务,相互之间通过hprose做微服务调用,需要找出接口耗时点。这次使用zipkin 链路跟踪工具,找出时间都消耗在哪了。先看一下效果图

 从图中看出,有大概15ms被hprose消耗了

安装zipkin

docker

docker 运行 zipkin 命令如下,k8s自行翻译

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

php 

php安装zipkin的composer包 openzipkin/zipkin

composer require openzipkin/zipkin

统计接口总耗时

在api项目的index.php文件开始和结束处添加代码,统计接口总耗时

开始处打点

$endpoint = Endpoint::create(getenv("APP_NAME"));

$reporter = new Http(['endpoint_url' => getenv("APP_ROUTE_TRACE")]);
$sampler = BinarySampler::createAsAlwaysSample();
$tracing = TracingBuilder::create()
  ->havingLocalEndpoint($endpoint)
  ->havingSampler($sampler)
  ->havingReporter($reporter)
  ->build();
$this->setTracer($tracing);
$this->setSpan($this->getTracer()->getTracer()->newTrace());
$this->getSpan()->setName($_SERVER['REQUEST_URI']);
$this->getSpan()->start();

主要是新建了一个 tracer跟踪整个请求和一个root span 跟踪单个服务的请求,

endpoint设置名称为微服务名称 test_api

reporter设置上报地址为zipkin的地址,目前是 http://zipkin:9411/api/v2/spans

span名称为接口请求路径 $_SERVER['REQUEST_URI']

最后是开始span

结束处打点

(self::$instance)->getSpan()->finish();
(self::$instance)->getTracer()->getTracer()->flush();

主要是把span结束掉 trace 刷新出来

微服务调用客户端实现

微服务客户端统计rpc调用时长

rpc开始处

$span = (self::$instance)->getTracer()->getTracer()->newChild((self::$instance)->getSpan()->getContext());
$span->setName($service_name . "_" . $client_url);
$span->setKind(Zipkin\Kind\CLIENT);
$span->setRemoteEndpoint(Endpoint::create($service_name));
$span->start();

$injector = (self::$instance)->getTracer()->getPropagation()->getInjector(new \Zipkin\Propagation\Map());
$origin_header_arr = [];
$injector($span->getContext(), $origin_header_arr);

foreach ($origin_header_arr as $origin_header_key => $origin_header_value){
   $client->setHeader($origin_header_key, $origin_header_value);
}

从root span创建了一个child span跟踪微服务调用,名称为 微服务名+调用地址

在rpc请求的header中加入 zipkin 的跟踪上下文信息

rpc结尾处

$span->finish();

微服务调用服务端实现

rpc server开始处

$endpoint = Endpoint::create(getenv("APP_NAME"));

$reporter = new Http(['endpoint_url' => getenv("APP_ROUTE_TRACE")]);
$sampler = BinarySampler::createAsAlwaysSample();
$tracing = TracingBuilder::create()
  ->havingLocalEndpoint($endpoint)
  ->havingSampler($sampler)
  ->havingReporter($reporter)
  ->build();
$this->setTracer($tracing);

$extractor = $this->getTracer()->getPropagation()->getExtractor(new ServerHeaders);
$extracted = $extractor($_SERVER);
$this->setSpan($this->getTracer()->getTracer()->newChild($extracted));
$this->getSpan()->setName(curPageURL());
$this->getSpan()->setKind(Zipkin\Kind\SERVER);
$this->getSpan()->start();

从$_SERVER中拿到zipkin提交的trace信息,并以此创建一个child span

span名称为接口地址

rpc server 结尾处

(self::$instance)->getSpan()->finish();
(self::$instance)->getTracer()->getTracer()->flush();

主要是把span结束掉 trace 刷新出来

 相关链接

手把手教你部署nginx+php

php和nginx镜像合并 && 代码打包到镜像

nginx-php镜像安装常用软件

yaf && yar微服务/hprose微服务 镜像初始化

常用开发工具:php_codesniffer代码规范检查&修复、phpstan语法检查、phpunit单元测试

.gitlab-ci.yaml自动镜像打包&&互联网企业规范化上线流程(上)

kustomize/kubectl自动镜像部署&&互联网企业规范化上线流程(下)

apisix网关、JMeter压测  

prometheus/grafana监控数据收集与展示

k8s容器网络性能调优

supervisor进程管理

安装opcache和apcu

APM性能监测工具skywalking

链路跟踪工具zipkin

phpfpm和nginx配置

php整合apollo配置中心

php rdkafka操作kafka消息队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Zipkin链路追踪是一个分布式跟踪系统,它可以帮助收集时间数据,并解决在microservice架构下的延迟问题。它的设计基于谷歌的Google Dapper论文,每个应用程序向Zipkin报告定时数据,Zipkin UI呈现了一个依赖图表来展示多少跟踪请求经过了每个应用程序。通过Zipkin链路追踪,可以方便地分析服务调用延迟问题,过滤或排序所有的跟踪请求,并查看每个跟踪请求占总跟踪时间的百分比。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [链路追踪工具Zipkin](https://blog.csdn.net/qiaotl/article/details/128615325)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [zipkin链路追踪详解](https://blog.csdn.net/fsy9595887/article/details/84935599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [服务链路追踪(Spring Cloud Sleuth)](https://blog.csdn.net/weixin_33750452/article/details/85941764)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fanghailiang2016

扔个包子砸我一下吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值