efabrica / elastic-apm-nette-extension
Nette 扩展程序,用于 Elastic APM
dev-master
2019-06-23 10:56 UTC
Requires
- php: >= 7.1
- nette/application: ^3.0
- nette/di: ^3.0
- philkra/elastic-apm-php-agent: ^6.5
- tracy/tracy: ^2.4
Requires (Dev)
- nette/database: ^3.0
- phpstan/phpstan-nette: 0.11
- squizlabs/php_codesniffer: ^2.6
Suggests
- nette/database: If you want use NetteDatabaseQuerySpanGenerator
This package is auto-updated.
Last update: 2024-08-23 23:17:10 UTC
README
用法
config.neon
extensions: apm: Efabrica\NetteElasticAmp\ApmExtension apm: enabled: true # optional config: # required (APM agent configuration) appName : "Name of this application" # required appVersion : "Application version" # optional, default: '' serverUrl : "APM Server Endpoint" # optional, default: http://127.0.0.1:8200 secretToken : "Secret token for APM Server" # optional, default: null hostname : "Hostname to transmit to the APM Server" # optinal, default: gethostname() active : "Activate the APM Agent" # optional, default: true timeout : "Guzzle Client timeout" # optional, default: 5 apmVersion : "APM Server Intake API version" # optional, default: 'v1' env : "$_SERVER vars to send to the APM Server, empty set sends all. Keys are case sensitive" # optional, default: [] cookies : "Cookies to send to the APM Server, empty set sends all. Keys are case sensitive" # optional, default: [] httpClient : "Extended GuzzleHttp\\Client" # optional, default: [] backtraceLimit: "Depth of a transaction backtrace" # optional, default: unlimited spanGenerators: # optional, default: NetteDatabaseQuerySpanGenerator::class - Efabrica\NetteElasticAmp\SpanGenerator\NetteDatabaseQuerySpanGenerator()
如何创建新的 SpanGenerators
每个 SpanGenerator 都必须在 APM 代理上注册 processSpan() 方法,以便捕获我们想要的事件。
public static function register(ContainerBuilder $containerBuilder, ServiceDefinition $apmTransaction): void { // Some code ... $service->addSetup(' $service->onEventStart[] = function ($param1, $param2) :void { (?)->processSpan(?, ?, $param1, $param2); }', [$apmTransaction, self::class, 'start']); $service->addSetup(' $service->onEventEnd[] = function ($param1, $param2) :void { (?)->processSpan(?, ?, $param1, $param2); }', [$apmTransaction, self::class, 'end']); } public function process(float $transactionStart, string $method, array $params): array { switch($method) { case 'start': // do something ... return $spans; // array with spans case 'end': // do something else ... return $spans; // array with spans } }