Злой полицейский
1.62K subscribers
1.42K photos
98 videos
7 files
3.28K links
Тимлид/разработчик/SOER. Делюсь мыслями про веб, программирование, инструменты, #WordPress, Joomla, Laravel, MoonShine, мотивацию, психологию, фильмы, сериалы.

Сайт - https://kobzarev.com

Администратор - @mihdan.
Download Telegram
🔥 Сбор профайлов в PHP через excimer и как их отправлять 🚀

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

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

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

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

Вот пример использования

use Excimetry\Profiler\ExcimerProfiler;
use Excimetry\Exporter\CollapsedExporter;
use Excimetry\Backend\PyroscopeBackend;

// 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: 'https://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 ⭐️, репостам и вашим комментариям ❤️



Давайте оставаться на связи ☄️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3