🔥 Сбор профайлов в PHP через excimer и как их отправлять 🚀

В продолжение темы про #observability решил рассказать, как отправлять данные профайлов, собранные через excimer. Надо сказать, что это не самый популярный модуль для сбора профайлов — и, как по мне, совершенно зря. Потому что это расширение максимально тесно интегрируется в PHP и даёт минимум нагрузки на процессор ⚡

Минусы? Конечно — отсутствие визуализации из коробки. Но визуализаторов полно: Pyroscope от Grafana, например. Или Speedscope. Проблема в другом — как туда всё это отправить, ведь excimer не умеет ни в OpenTelemetry, ни в какой-нибудь другой удобный формат. Что делать?

А ничего — написать враппер и адаптеры самому 😎 Чем я и занялся. В итоге появился open source пакет 👩‍💻 https://github.com/excimetry/excimetry

Получился, как по мне, весьма удобный. Я сразу добавил интеграцию с клиентами по OpenTelemetry, данные идут в бинарном формате через protobuf. Есть поддержка: ✅ Pyroscope ✅ Speedscope ✅ Выгрузка на файл ✅ Профайлинг консольных команд

Вот пример использования `use ExcimetryProfilerExcimerProfiler; use ExcimetryExporterCollapsedExporter; use ExcimetryBackendPyroscopeBackend;

// Create a profiler $profiler = new ExcimerProfiler();

// Start profiling $profiler->start();

// Your code to profile here // ...

// Stop profiling $profiler->stop();

// Get the profile $log = $profiler->getLog();

// Send to Pyroscope $exporter = new CollapsedExporter(); $backend = new PyroscopeBackend( serverUrl: 'http://localhost:4040', appName: 'my-application', labels: ['env' => 'production'], exporter: $exporter, );

// Send the profile to Pyroscope $backend->send($log);

// You can also set the backend to send asynchronously $backend->setAsync(true); $backend->send($log); // Returns immediately, sends in background

// Add custom labels $backend->addLabel('version', '1.0.0'); $backend->addLabel('region', 'us-west');

Честно, не знаю, насколько далеко это всё зайдёт — но идея мне реально нравится 💡 Возможно, excimer станет чуточку популярнее благодаря excimetry.

Буду рад звёздочкам на GitHub ⭐️, репостам и вашим комментариям ❤️

Давайте оставаться на связи ☄️


В этом посте были ссылки, но мы их удалили по правилам Сетки`