open-telemetry / opentelemetry-auto-guzzle
OpenTelemetry auto-instrumentation for Guzzle.
Package info
github.com/opentelemetry-php/contrib-auto-guzzle
pkg:composer/open-telemetry/opentelemetry-auto-guzzle
Requires
- php: ^8.1
- ext-opentelemetry: *
- guzzlehttp/guzzle: ^7
- open-telemetry/api: ^1.0
- open-telemetry/sem-conv: ^1.32
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3
- guzzlehttp/promises: ^2
- nyholm/psr7: *
- open-telemetry/sdk: ^1.0
- phan/phan: ^5.0
- phpstan/phpstan: ^1.1
- phpstan/phpstan-mockery: ^1.1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
- psalm/plugin-phpunit: ^0.19.2
- vimeo/psalm: 6.4.0
README
This is a read-only subtree split of https://github.com/open-telemetry/opentelemetry-php-contrib.
OpenTelemetry Guzzle auto-instrumentation
Please read https://opentelemetry.io/docs/instrumentation/php/automatic/ for instructions on how to install and configure the extension and SDK.
Overview
Auto-instrumentation hooks are registered via composer.
- create spans automatically for each Guzzle request that is sent (sync or async)
- add a
traceparentheader to the request to facilitate distributed tracing
Configuration
Disabling Guzzle instrumentation
The extension can be disabled via runtime configuration:
OTEL_PHP_DISABLED_INSTRUMENTATIONS=guzzle
Request and response header capturing
Guzzle auto-instrumentation supports capturing headers from both requests and responses as span attributes. This feature is disabled by default and can be enabled through environment variables or array directives in the php.ini configuration file. Header name matching is case-insensitive.
Environment variables configuration
OTEL_INSTRUMENTATION_HTTP_CLIENT_CAPTURE_REQUEST_HEADERS=host,accept OTEL_INSTRUMENTATION_HTTP_CLIENT_CAPTURE_RESPONSE_HEADERS=content-type,server
The legacy options are still supported but are not recommended as they may be deprecated in a future release:
OTEL_PHP_INSTRUMENTATION_HTTP_REQUEST_HEADERS=host,accept OTEL_PHP_INSTRUMENTATION_HTTP_RESPONSE_HEADERS=content-type,server
php.ini configuration
otel.instrumentation.http.request_headers[]=host otel.instrumentation.http.request_headers[]=accept otel.instrumentation.http.response_headers[]=content-type otel.instrumentation.http.response_headers[]=server