开发环境:

php >= 5.6

linux环境 必须安装thrift

omposer require opentracing/opentracing  1.0.0-beta5
composer require jukylin/jaeger-php v2.1.3

 下面展示一个进程内和跨进程的访问

PHP实现opentracing jaeger链路追踪

 

 

 

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";
http.php

相关文章: