开发环境:
php >= 5.6
linux环境 必须安装thrift
omposer require opentracing/opentracing 1.0.0-beta5 composer require jukylin/jaeger-php v2.1.3
下面展示一个进程内和跨进程的访问
http代码中分别请求了crm.ichunt.com,baidu.com;在访问了baidu.com嵌套了子span访问ichunt.com;接下来访问http2.php
http2代码中 访问了ichunt.com和crm.ichunt.com
<?php /* * Copyright (c) 2019, The Jaeger Authors * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ require_once './vendor/autoload.php'; use Jaeger\Config; use GuzzleHttp\Client; use OpenTracing\Formats; use OpenTracing\Reference; unset($_SERVER['argv']); set_time_limit(0); //init server span start $config = Config::getInstance(); $config->gen128bit(); $config::$propagator = Jaeger\Constants\PROPAGATOR_JAEGER; $tracer = $config->initTracer('example-php', '192.168.1.234:6831'); $injectTarget = []; $spanContext = $tracer->extract(Formats\TEXT_MAP, $_SERVER); echo sprintf("parent-spanContext %s <br>",print_r($spanContext,true)); if(!$spanContext){ $serverSpan = $tracer->startSpan('example HTTP'); }else{ $serverSpan = $tracer->startSpan('example HTTP', ['references' => [ Reference::create(Reference::FOLLOWS_FROM, $spanContext), Reference::create(Reference::CHILD_OF, $spanContext) ]]); } $serverSpan->addBaggageItem("version", "1.8.9"); $serverSpan->setTag("serverSpan-key","serverSpan-value"); $tracer->inject($serverSpan->getContext(), Formats\TEXT_MAP, $_SERVER); //init server span end $clientTracer = $config->initTracer('HTTP'); //client span1 start $injectTarget1 = []; $spanContext1 = $clientTracer->extract(Formats\TEXT_MAP, $_SERVER); echo sprintf("spanContext1 %s <br>",print_r($spanContext1,true)); $clientSpan1 = $clientTracer->startSpan('request1', ['child_of' => $spanContext1]); $clientTracer->inject($clientSpan1->spanContext, Formats\TEXT_MAP, $injectTarget1); $method = 'GET'; $url = 'http://baidu.com/'; $client = new Client(); $res = $client->request($method, $url,['headers' => $injectTarget1]); $clientSpan1->setTag('http.status_code', 200); $clientSpan1->setTag('http.method', 'GET'); $clientSpan1->setTag('http.url', $url); $clientSpan1->addBaggageItem("event","event-HTTP1-value"); $clientSpan1->log(['message' => "HTTP1 ". $method .' '. $url .' end !']); $clientSpan1->finish(); //client span1 end //-------------------------------------------------------------------------------------------- //client span2 start $injectTarget2 = []; $spanContext2 = $clientTracer->extract(Formats\TEXT_MAP,$_SERVER); echo sprintf("spanContext2 %s <br>",print_r($spanContext2,true)); $clientSpan2 = $clientTracer->startSpan('request2',['references' => [ Reference::create(Reference::FOLLOWS_FROM, $clientSpan1->spanContext), Reference::create(Reference::CHILD_OF, $spanContext1) ]]); $clientTracer->inject($clientSpan2->spanContext, Formats\TEXT_MAP, $injectTarget2); $method = 'GET'; //$url = 'http://192.168.1.169:8088/http2.php'; $url = 'http://ichunt.com/'; $client = new Client(); $res = $client->request($method, $url, ['headers' => $injectTarget2]); $clientSpan2->setTag('http.status_code', 200); $clientSpan2->setTag('http.method', 'GET'); $clientSpan2->setTag('http.url', $url); $clientSpan2->log(['message' => "HTTP2 ". $method .' '. $url .' end !']); $clientSpan2->finish(); ////client span2 end //-------------------------------------------------------------------------------------------- //client span3 start $injectTarget3 = []; $spanContext3 = $clientTracer->extract(Formats\TEXT_MAP,$_SERVER); echo sprintf("spanContext3 %s <br>",print_r($spanContext3,true)); $clientSpan3 = $clientTracer->startSpan('request3', ['references' => [ Reference::create(Reference::FOLLOWS_FROM, $spanContext3), Reference::create(Reference::CHILD_OF, $spanContext3) ]]); $clientTracer->inject($clientSpan3->spanContext, Formats\TEXT_MAP, $injectTarget3); $method = 'GET'; $url = 'http://crm.ichunt.net/'; $client = new Client(); $res = $client->request($method, $url, ['headers' => $injectTarget3]); $clientSpan3->setTag('http.status_code', 200); $clientSpan3->setTag('http.method', 'GET'); $clientSpan3->setTag('http.url', $url); $clientSpan3->log(['message' => "HTTP2 ". $method .' '. $url .' end !']); $clientSpan3->finish(); ////client span3 end //-------------------------------------------------------------------------------------------- //client span2 start $injectTarget4 = []; $spanContext4 = $clientTracer->extract(Formats\TEXT_MAP, $_SERVER); echo sprintf("spanContext4 %s <br>",print_r($spanContext4,true)); $clientSpan4 = $clientTracer->startSpan('request4', ['references' => [ Reference::create(Reference::FOLLOWS_FROM, $spanContext4), Reference::create(Reference::CHILD_OF, $spanContext4) ]]); $clientTracer->inject($clientSpan4->spanContext, Formats\TEXT_MAP, $injectTarget4); $method = 'GET'; $url = 'http://192.168.1.169/http2.php'; $client = new Client(); $res = $client->request($method, $url, ['headers' => $injectTarget4]); $clientSpan4->setTag('http.status_code', 200); $clientSpan4->setTag('http.method', 'GET'); $clientSpan4->setTag('http.url', $url); $clientSpan4->log(['message' => "HTTP2 ". $method .' '. $url .' end !']); $clientSpan4->finish(); //client span2 end ////server span end $serverSpan->finish(); //trace flush $config->flush(); echo "success\r\n";