PHPackages                             mumzworld/magento2-opentelemetry - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. mumzworld/magento2-opentelemetry

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

mumzworld/magento2-opentelemetry
================================

OpenTelemetry integration package for Magento 2 applications with complete observability stack

1.0.1(1mo ago)1521↑100%2MITPHPPHP ^8.1

Since Apr 8Pushed 1mo agoCompare

[ Source](https://github.com/mumzworld-tech/magento2-opentelemetry)[ Packagist](https://packagist.org/packages/mumzworld/magento2-opentelemetry)[ RSS](/packages/mumzworld-magento2-opentelemetry/feed)WikiDiscussions master Synced 4w ago

READMEChangelogDependencies (10)Versions (5)Used By (0)

[![Magento 2 Opentelemetry Instrumentation](https://camo.githubusercontent.com/21d85452cbb9037cc0b473fb795e3f117158b344da13996fc3f294103b63db2b/68747470733a2f2f692e696d6775722e636f6d2f643851454852622e706e67)](https://camo.githubusercontent.com/21d85452cbb9037cc0b473fb795e3f117158b344da13996fc3f294103b63db2b/68747470733a2f2f692e696d6775722e636f6d2f643851454852622e706e67)

Magento 2 OpenTelemetry Instrumentation
=======================================

[](#magento-2-opentelemetry-instrumentation)

OpenTelemetry integration package for Magento 2 applications with complete observability stack

[![Packagist Version](https://camo.githubusercontent.com/0ec28e8a882499512ddb6197f2afcac53b36845eb1791ed639a9021c10652943/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f7461672f6d756d7a776f726c642d746563682f6d6167656e746f322d6f70656e74656c656d657472793f6c6f676f3d7061636b616769737426736f72743d73656d766572266c6162656c3d7061636b6167697374267374796c653d666f722d7468652d6261646765)](https://packagist.org/packages/mumzworld/magento2-opentelemetry)[![Packagist Downloads](https://camo.githubusercontent.com/e75dccf9cb102067d3e2d57df825e42100e3d522aceb729196f4251908a97a8f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6d756d7a776f726c642f6d6167656e746f322d6f70656e74656c656d657472792e7376673f6c6f676f3d636f6d706f736572267374796c653d666f722d7468652d6261646765)](https://packagist.org/packages/mumzworld/magento2-opentelemetry/stats)[![Supported Magento Versions](https://camo.githubusercontent.com/a504a0adb323bd8dfa1ee1ca6d8299fcf2a52d50bb943fc5fb087413b877e124/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d6167656e746f2d253230322e342d627269676874677265656e2e7376673f6c6f676f3d6d6167656e746f266c6f6e6743616368653d74727565267374796c653d666f722d7468652d6261646765)](https://camo.githubusercontent.com/a504a0adb323bd8dfa1ee1ca6d8299fcf2a52d50bb943fc5fb087413b877e124/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d6167656e746f2d253230322e342d627269676874677265656e2e7376673f6c6f676f3d6d6167656e746f266c6f6e6743616368653d74727565267374796c653d666f722d7468652d6261646765)[![License](https://camo.githubusercontent.com/a8e59c52a61079bac6876857b971b3115f991aa15de6cb7a243876b23007bb62/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e3f636f6c6f723d253233323334267374796c653d666f722d7468652d6261646765)](https://camo.githubusercontent.com/a8e59c52a61079bac6876857b971b3115f991aa15de6cb7a243876b23007bb62/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e3f636f6c6f723d253233323334267374796c653d666f722d7468652d6261646765)

📖 Overview
----------

[](#-overview)

A Composer library that adds [OpenTelemetry](https://opentelemetry.io/) tracing to Magento 2. It hooks into Magento core classes at runtime to automatically create spans for:

- **HTTP requests** — REST API, GraphQL, Backend admin, HTTP client
- **Database** — SQL query tracing
- **Cache** — Page cache, Redis, Varnish
- **CLI** — Commands, cron jobs, indexer operations
- **Entity** — EAV and flat entity load/save
- **Business logic** — Pricing, shipping, inventory, sales rules, repositories

🔄 OpenTelemetry Flow
--------------------

[](#-opentelemetry-flow)

[![OpenTelemetry Flow](docs/opentelemetry-flow.png)](docs/opentelemetry-flow.png)

📊 Grafana Traces
----------------

[](#-grafana-traces)

[![Grafana Traces](docs/grafana-traces.png)](docs/grafana-traces.png)

⚙️ How OpenTelemetry PHP SDK Works Under the Hood
-------------------------------------------------

[](#️-how-opentelemetry-php-sdk-works-under-the-hood)

```
1. PHP registers shutdown handler:
   OpenTelemetry\SDK\Common\Util\ShutdownHandler::register()

2. During shutdown:
   │
   └─> OpenTelemetry\SDK\Common\Util\ShutdownHandler::handleShutdown()
       │
       └─> Executes registered callbacks including:
           │
           └─> OpenTelemetry\SDK\Trace\TracerProvider->shutdown()
               │
               └─> Delegates to:
                   │
                   └─> OpenTelemetry\SDK\Trace\TracerSharedState->shutdown()
                       │
                       └─> Processes all span processors:
                           │
                           └─> OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessor->shutdown()
                               │
                               └─> Final flush:
                                   │
                                   └─> OpenTelemetry\SDK\Trace\SpanProcessor\BatchSpanProcessor->flush()
                                       │
                                       └─> Delegates export to:
                                           │
                                           └─> OpenTelemetry\Contrib\Otlp\SpanExporter->export()
                                               │
                                               ├─> Serializes spans
                                               └─> Makes network call to collector

```

📋 Prerequisites
---------------

[](#-prerequisites)

- PHP 8.0+
- PECL
- Composer
- OpenTelemetry PHP extension + PHP SDK
- Magento Application
    - Docker
    - Host

🔧 OpenTelemetry Setup
---------------------

[](#-opentelemetry-setup)

### 1. Install OpenTelemetry PHP Extension

[](#1-install-opentelemetry-php-extension)

```
pecl install opentelemetry
```

### 2. Configure the .ini Settings

[](#2-configure-the-ini-settings)

Add the following to your PHP `.ini` file (e.g. `php.ini` or a custom `opentelemetry.ini`):

```
OTEL_PHP_AUTOLOAD_ENABLED="true"
OTEL_SERVICE_NAME=magento2
OTEL_TRACES_EXPORTER=otlp
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_EXPORTER_OTLP_ENDPOINT=http://[COLLECTOR-IP]:4318
OTEL_PROPAGATORS=baggage,tracecontext
;OTEL_PHP_DISABLED_INSTRUMENTATIONS=magento2
;OTEL_PHP_EXCLUDED_URLS="health_check.php,get.php"
```

### 3. Verify the Extension

[](#3-verify-the-extension)

```
php -m | grep opentelemetry
php --ri opentelemetry
```

### 4. Install the PHP SDK

[](#4-install-the-php-sdk)

```
composer require open-telemetry/sdk open-telemetry/api open-telemetry/sem-conv open-telemetry/exporter-otlp
```

> **Note:** These packages are automatically installed as dependencies when you install `mumzworld/magento2-opentelemetry`. You only need to install them manually if you're setting up OpenTelemetry without this package.

📦 Package Installation
----------------------

[](#-package-installation)

```
composer require mumzworld/magento2-opentelemetry
```

No Magento module setup is needed — the package bootstraps automatically via Composer's autoload mechanism.

🔍 What Is Auto-Instrumented
---------------------------

[](#-what-is-auto-instrumented)

Once installed, this package automatically instruments the following Magento areas — no code changes required.

### Core

[](#core)

InstrumentationHooked ClassMethodMagento Bootstrap`Magento\Framework\App\Bootstrap``run()`, `terminate()`Exception Handling`Magento\Framework\App\Http``catchException()`Profiler`Magento\Framework\Profiler``start()`, `stop()`Event Observers`Magento\Framework\Event\InvokerInterface``dispatch()`### HTTP

[](#http)

InstrumentationHooked ClassMethodREST API`Magento\Webapi\Controller\Rest\Interceptor``dispatch()`REST Exceptions`Magento\Framework\Webapi\Exception``__construct()`GraphQL Dispatch`Magento\GraphQl\Controller\GraphQl\Interceptor``dispatch()`GraphQL Query`Magento\Framework\GraphQl\Query\QueryProcessor``process()`GraphQL Resolver`Magento\Framework\GraphQl\Query\ResolverInterface``resolve()`Backend Admin`Magento\Backend\App\AbstractAction``dispatch()`HTTP Client`GuzzleHttp\Client``send()`### Database

[](#database)

InstrumentationHooked ClassMethodSQL Queries`Magento\Framework\DB\Adapter\Pdo\Mysql``query()`### Cache

[](#cache)

InstrumentationHooked ClassMethodFormKey Flush`Magento\PageCache\Observer\FlushFormKey\Interceptor``execute()`Full Cache Flush`Magento\CacheInvalidate\Observer\FlushAllCacheObserver``execute()`Cache Invalidation`Magento\PageCache\Observer\InvalidateCache``execute()`Redis`Magento\Framework\Cache\Backend\Redis``test()`, `save()`, `remove()`, `clean()`Varnish Purge`Magento\CacheInvalidate\Model\PurgeCache``sendPurgeRequest()`### CLI

[](#cli)

InstrumentationHooked ClassMethodCLI Runner`Magento\Framework\Console\Cli``doRun()`Console Commands`Symfony\Component\Console\Command\Command``run()`Cron Jobs`Magento\Cron\Observer\ProcessCronQueueObserver``tryRunJob()`Reindex`Magento\Indexer\Model\Processor``reindexAllInvalid()`Mview Actions`Magento\Framework\Mview\View``executeAction()`Mview Execute`Magento\Framework\Mview\ActionInterface``execute()`Mview Changelog`Magento\Framework\Mview\View\ChangelogInterface``clear()`### Entity (EAV)

[](#entity-eav)

InstrumentationHooked ClassMethodProduct`Magento\Catalog\Model\ResourceModel\Product\Interceptor``load()`, `save()`, `delete()`Category`Magento\Catalog\Model\ResourceModel\Category\Interceptor``load()`, `save()`, `delete()`Customer`Magento\Customer\Model\ResourceModel\Customer\Interceptor``load()`, `save()`, `delete()`Customer Address`Magento\Customer\Model\ResourceModel\Address\Interceptor``load()`, `save()`, `delete()`### Entity (Flat)

[](#entity-flat)

InstrumentationHooked ClassMethodQuote`Magento\Quote\Model\ResourceModel\Quote``load()`, `save()`, `delete()`Quote Item`Magento\Quote\Model\ResourceModel\Quote\Item``load()`, `save()`, `delete()`Order`Magento\Sales\Model\ResourceModel\Order``load()`, `save()`, `delete()`Order Item`Magento\Sales\Model\ResourceModel\Order\Item``load()`, `save()`, `delete()`Invoice`Magento\Sales\Model\ResourceModel\Order\Invoice``load()`, `save()`, `delete()`Credit Memo`Magento\Sales\Model\ResourceModel\Order\Creditmemo``load()`, `save()`, `delete()`### Business Logic (Misc)

[](#business-logic-misc)

> **Opt-in.** This group is **disabled by default** — it produces the highest-volume spans (per-rule sales-rule evaluation, repository calls, pricing/tax calculation, address totals, etc.) and is best enabled selectively. Activate it by setting `OTEL_MAGENTO_MISC_INSTRUMENTATION=true` in your environment (`.env`, `docker-compose.yml`, nginx `fastcgi_param`, `php-fpm` pool, or `export` for CLI).

InstrumentationHooked ClassMethodAbstract DB`Magento\Framework\Model\ResourceModel\Db\AbstractDb``load()`, `save()`, `delete()`Product Repository`Magento\Catalog\Model\ProductRepository``get()`, `getById()`Category Repository`Magento\Catalog\Model\CategoryRepository``get()`Customer Repository`Magento\Customer\Model\ResourceModel\CustomerRepository``get()`, `getById()`Shipping Rates`Magento\Shipping\Model\Shipping``collectRates()`Final Price`Magento\Catalog\Model\Product\Type\Price``getFinalPrice()`, `_applyTierPrice()`Tax Calculation`Magento\Tax\Model\Calculation``getRate()`Sales Rules`Magento\SalesRule\Model\Validator``process()`Inventory`Magento\CatalogInventory\Observer\QuantityValidatorObserver``execute()`Totals Collector`Magento\Quote\Model\Quote\TotalsCollector\Interceptor``collectAddressTotals()`Address Totals`Magento\Quote\Model\Quote\Address\Total\AbstractTotal``collect()`Totals Collector`Magento\Quote\Model\Quote\Address\Total\Collector``collect()`Discount Calc`Magento\SalesRule\Model\Rule\Action\Discount\AbstractDiscount``calculate()`🚀 Optimization Tips
-------------------

[](#-optimization-tips)

### Install `ext-protobuf` PHP Extension

[](#install-ext-protobuf-php-extension)

Preferred over the pure-PHP library `google/protobuf` for production:

```
pecl install protobuf
```

OptionPackagePerformance**C extension (recommended)**`ext-protobuf` via `pecl install protobuf`Native speed, minimal overheadPure-PHP library`google/protobuf` via ComposerSlower serialization, higher CPU usage> **NOTE:** To reduce the latency imposed by the OTel exporter:
>
> 1. Use a local OTel collector (instead of remote)
> 2. Use the `ext-protobuf` C extension instead of the Composer package

### Limiting the Number of Spans

[](#limiting-the-number-of-spans)

See [OpenTelemetry SDK Environment Variables — Attribute Limits](https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/#attribute-limits) for details on:

- Limiting the number of span attributes
- Limiting the length of span attribute values
- Limiting the number of events

### Export Settings

[](#export-settings)

SettingPurposeDefaultSuggestedEffect of Tuning`OTEL_BSP_MAX_QUEUE_SIZE`Max number of spans buffered in memory204810000+Prevents spans being dropped under high load`OTEL_BSP_MAX_EXPORT_BATCH_SIZE`Max spans exported per batch5121000–5000Reduces export cycles, improves throughput`OTEL_BSP_SCHEDULE_DELAY`How often (ms) the processor checks the queue for exporting5000 ms100–200 msFaster flushing during long-running requests`OTEL_BSP_EXPORT_TIMEOUT`Max time (ms) allowed for a single export batch30000 ms1000–2000 msPrevents request shutdown from blocking if exporter is slow/hangs⚡ Performance Considerations
----------------------------

[](#-performance-considerations)

- **Sampling:** Use appropriate sampling rates for production (`0.1` = 10%)
- **Batching:** Configure batch processors in collector
- **Resource Limits:** Set memory and CPU limits
- **Network:** Use gRPC for better performance
- **Storage:** Configure appropriate retention policies

🤝 Contributing
--------------

[](#-contributing)

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests
5. Submit a pull request

📄 License
---------

[](#-license)

This package is licensed under the [MIT License](LICENSE).

💬 Support
---------

[](#-support)

For support and questions:

- Create an issue in the repository
- Check the troubleshooting section
- Review the [Magento 2 OpenTelemetry documentation](README.md)

---

Built with ❤️ by Mumzworld Development Team

###  Health Score

44

—

FairBetter than 91% of packages

Maintenance93

Actively maintained with recent releases

Popularity18

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~47 days

Total

2

Last Release

36d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/227543137?v=4)[sahib-mmz](/maintainers/sahib-mmz)[@sahib-mmz](https://github.com/sahib-mmz)

---

Top Contributors

[![MagePsycho](https://avatars.githubusercontent.com/u/1205071?v=4)](https://github.com/MagePsycho "MagePsycho (9 commits)")

### Embed Badge

![Health badge](/badges/mumzworld-magento2-opentelemetry/health.svg)

```
[![Health](https://phpackages.com/badges/mumzworld-magento2-opentelemetry/health.svg)](https://phpackages.com/packages/mumzworld-magento2-opentelemetry)
```

###  Alternatives

[keepsuit/laravel-opentelemetry

OpenTelemetry integration for laravel

167558.4k](/packages/keepsuit-laravel-opentelemetry)[drupal/core-dev

require-dev dependencies from drupal/drupal; use in addition to drupal/core-recommended to run tests from drupal/core.

2022.6M335](/packages/drupal-core-dev)[traceway/opentelemetry-symfony

Pure-PHP OpenTelemetry instrumentation for Symfony — automatic HTTP, Console, HttpClient, Messenger, Doctrine DBAL, Cache, Twig tracing and Monolog log-trace correlation with response propagation, a lightweight Tracing helper, route templates, and semantic conventions. No C extension required (ext-protobuf recommended for production).

7812.6k](/packages/traceway-opentelemetry-symfony)[open-telemetry/opentelemetry-auto-laravel

OpenTelemetry auto-instrumentation for Laravel

592.7M8](/packages/open-telemetry-opentelemetry-auto-laravel)[open-telemetry/symfony-sdk-bundle

OpenTelemetry Symfony integration

12107.8k5](/packages/open-telemetry-symfony-sdk-bundle)[open-telemetry/opentelemetry-auto-symfony

OpenTelemetry auto-instrumentation for Symfony

561.6M3](/packages/open-telemetry-opentelemetry-auto-symfony)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
