🔥 Сбор профайлов в 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 ⭐️, репостам и вашим комментариям ❤️
⸻
Давайте оставаться на связи ☄️
В этом посте были ссылки, но мы их удалили по правилам Сетки`