inbox/opentracing-bundle-core
Composer 安装命令:
composer require inbox/opentracing-bundle-core
包简介
Symfony Opentracing bundle to easily enable distributed tracing
关键字:
README 文档
README
This collection of symfony bundles provides everything needed for a symfony application to enable distributed tracing.
It utilizes the PHP implementation of the opentracing specification and wraps it in an opinionated fashion. It also aims to never disrupt your application, by not throwing exceptions and sending tracing data to the agent as late as possible in the Symfony lifecycle.
The core contains:
- kernel/console event subscribers to automatically instrument the application, adding useful tags to root spans
- convenience functions to create tracing spans manually, including logging messages and tagging spans
- automatic tracing header propagation for PSR-18 clients
- a convenience function for passing the tracing headers to PSR-7 requests or arrays manually
Additional bundles contain:
- a monolog processor to enrich log contexts with the current span context
- Guzzle client automatic spanning and header propagation
- php-http/httplug-bundle automatic spanning and header propagation
- Doctrine DBAL automatic spanning
- amqplib/RabbitMQ automatic spanning and header propagation
- eMAGTechLabs/RabbitMqBundle automatic spanning and header propagation
Installation
Choose tracer implementation
The core itself is only a library and should not be installed directly. You need to choose from different tracer implementation bundles, which will then use this library.
Jaeger
- require the dependencies:
composer req auxmoney/opentracing-bundle-jaeger
- if not done already: spin up development jaeger instance (All in One)
Note: when setting up a reliable production environment, keep in mind using the agent approach, that Jaeger proposes. Especially having
the jaeger agent ideally available on localhost will prevent you from experiencing trace or span loss due to UDP packet size limitations
by the involved networks.
Zipkin
- require the dependencies:
composer req auxmoney/opentracing-bundle-zipkin
- if not done already: spin up development zipkin instance (Docker)
Enable the bundle
If you are using Symfony Flex, you are all set!
If you are not using it, you need to manually enable the bundle:
- add bundle to your application:
# Symfony 3: AppKernel.php $bundles[] = new Auxmoney\OpentracingBundle\OpentracingBundle();
# Symfony 4+: bundles.php Auxmoney\OpentracingBundle\OpentracingBundle::class => ['all' => true],
Configuration
You can optionally configure environment variables, however, the default configuration will run fine out of the box for a tracing agent on localhost. If you cannot change environment variables in your project, you can alternatively overwrite the container parameters directly.
| environment variable | container parameter | type | default | description |
|---|---|---|---|---|
| AUXMONEY_OPENTRACING_AGENT_HOST | auxmoney_opentracing.agent.host | string |
localhost |
hostname or IP of the agent |
| AUXMONEY_OPENTRACING_AGENT_PORT | auxmoney_opentracing.agent.port | string |
(depends on the chosen tracer) | port of the agent |
| AUXMONEY_OPENTRACING_PROJECT_NAME | auxmoney_opentracing.project.name | string |
basename(kernel.project_dir) |
passed to the tracer as tracer name / service name |
| AUXMONEY_OPENTRACING_SAMPLER_CLASS | auxmoney_opentracing.sampler.class | string |
(depends on the chosen tracer) | class of the using sampler |
| AUXMONEY_OPENTRACING_SAMPLER_VALUE | auxmoney_opentracing.sampler.value | string |
(depends on the chosen tracer and sampler) | must be a JSON decodable string, for the configuration of the chosen sampler |
| AUXMONEY_OPENTRACING_RESPONSE_HEADER | auxmoney_opentracing.response.header | string |
true |
if HTTP responses should ship the trace id as header; set to false (as string) to deactivate |
Usage
Propagation of tracing headers
For PSR-18 compatible clients, this bundle provides automatic tracing header propagation.
For Guzzle clients, the Guzzle bundle provides automatic tracing header propagation.
Manual propagation of tracing headers
If you use neither PSR-18 nor Guzzle, you need to inject the trace headers into every outgoing PSR-7 compatible request. To do so, simply use
Auxmoney\OpentracingBundle\Service\Tracing::injectTracingHeaders(Psr\Http\Message\RequestInterface $request): Psr\Http\Message\RequestInterface
on the request and use the resulting request with your favorite request client.
If you are using a request that is not PSR-7 compatible, you can inject the headers directly into an array using
Auxmoney\OpentracingBundle\Service\Tracing::injectTracingHeadersIntoCarrier(array $carrier): array
passing the array representing the headers of your request and use the resulting array with your favorite request client.
Automatic tracing
Out of the box, the bundle will trace some spans automatically:
- span of the kernel lifecycle (from
kernel.requesttokernel.finish_request) - span of controller lifecycles (from each
kernel.controllerto eachkernel.response, includingkernel.exception) - span of the command lifecycle (from
console.commandtoconsole.terminate, includingconsole.error)
In case of exceptions thrown, it will additionally log exception types and messages to a controller/command span.
Manual tracing
You can inject the tracing service automatically (via autowiring) or use the provided service alias @auxmoney_opentracing.
Manual spanning
You can define spans manually, by using
Auxmoney\OpentracingBundle\Service\Tracing::startActiveSpan(string $operationName, array $options = null): void
and
Auxmoney\OpentracingBundle\Service\Tracing::finishActiveSpan(): void
respectively.
$operationName is the displayed name of the trace operation, $options is an associative array of tracing options; the main usage is
$options['tags'], which is an associative array of user defined tags (key value pairs). See the
documentation for starting spans for more information.
Tagging spans
You can set tags (key value pairs) to the currently active span with
Auxmoney\OpentracingBundle\Service\Tracing::setTagOfActiveSpan(string $key, string|bool|int|float $value): void
You should respect the span conventions of the opentracing project when setting tags to spans.
Logging in spans
You can always attach logs (key value pairs) to the currently active span with
Auxmoney\OpentracingBundle\Service\Tracing::logInActiveSpan(array $fields): void
You should respect the log conventions of the opentracing project when logging fields.
Baggage items
You can propagate baggage items (key value pairs) in-band across process boundaries with
Auxmoney\OpentracingBundle\Service\Tracing::setBaggageItem(string $key, string $value): void
and retrieve them with
Auxmoney\OpentracingBundle\Service\Tracing::getBaggageItem(string $key): ?string
You should use this feature thoughtfully and with care. Every key and value is copied into every local and remote child of the associated Span, and that can add up to a lot of network and cpu overhead.
Development
Be sure to run
composer run-script quality
every time before you push code changes. The tools run by this script are also run in the CI pipeline.
Doc
Various informations regarding the bundle and its usage is available in the doc section.
inbox/opentracing-bundle-core 适用场景与选型建议
inbox/opentracing-bundle-core 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 0 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 05 月 16 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「symfony」 「monolog」 「Guzzle」 「symfony-bundle」 「zipkin」 「jaeger」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 inbox/opentracing-bundle-core 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 inbox/opentracing-bundle-core 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 inbox/opentracing-bundle-core 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A GeoIP decorator/processor for monolog
The bundle for easy using json-rpc api on your project
A Zend Framework module that sets up Monolog for logging in applications.
Laravel 5.6 Monolog custom telegram channel
A Monolog processor to add X-Request-Id or UNIQUE_ID env to monolog stack if present, provide a default one otherwise. Optionally, add a forwarded request-id list.
PSR-3 compatible logger with dynamic file naming and hourly rotation, powered by Monolog
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 36
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-05-16