samuelbednarcik / elastic-apm-agent
v0.2.1
2018-11-21 14:36 UTC
Requires
- php: >=7.2
- guzzlehttp/guzzle: ^6.3
- symfony/http-foundation: ^4.1
- symfony/property-info: ^4.1
- symfony/serializer: ^4.1
Requires (Dev)
- phpstan/phpstan: ^0.10.5
This package is auto-updated.
Last update: 2020-05-22 08:31:53 UTC
README
非官方的Elastic APM PHP代理(>=6.5)。该包已不再维护,请使用此包代替。
此包还包含易于与现有项目和库(如Doctrine、Guzzle等)集成的助手。
收集器
安装
composer require samuelbednarcik/elastic-apm-agent
使用
创建一个代理配置对象
$config = new AgentConfiguration(); $config->setServiceName('name-of-your-project'); $config->setServerUrl('https://:8200'); // elastic apm server // create metadata which will be applied to the transaction $metadata = new Metadata(); $metadata->setService( MetadataBuilder::buildService($config->getServiceName()) ); $config->setMetadata($metadata);
创建代理实例
$agent = new Agent( $config, new Client(), new ElasticAPMSerializer() );
尽可能早地在代码中调用start方法。请求启动时间从服务器变量REQUEST_TIME_FLOAT
获取。如果不提供请求实例,它将根据全局变量创建。start方法还将返回一个事务实例。
$transaction = $agent->start($request);
在代码结束时调用stop函数。如果使用symfony请求/响应,可以使用事务构建器为事务生成上下文。通过调用stop方法,将收集所有收集器中的span。此函数还将返回一个事务。
$transaction = $agent->stop(); $transaction->setContext( TransactionBuilder::buildContext($request, $response) );
之后,可以调用sendAll方法,将所有信息发送到APM服务器。
try { $agent->sendAll(); } catch (GuzzleException $e) { // log an error }
Span收集器
Span收集器用于提取关于在外部库(如doctrine或guzzle)中发生的事件的信息。
在创建代理实例时可以注册收集器
$agent = new Agent( $config, new Client(), new ElasticAPMSerializer(), [ new MyCollector() ] );
在调用stop方法后,代理将收集所有注册收集器的span。
分布式跟踪
代理会自动处理分布式跟踪头,您只需在您想跟踪的请求中发送elastic-traceparent-header
即可。
$traceparent = new TraceParent( $transaction->getTraceId(), $transaction->getId(), '01' ); $request->withHeader( TraceParent::HEADER_NAME, $traceparent->__toString() );
如果您使用Guzzle客户端,可以使用TracingGuzzleMiddleware
来为您注入头信息。
$middleware = new TracingGuzzleMiddleware($agent) $stack = HandlerStack::create(); $stack->push($middleware()); $client = new Client(['handler' => $stack])