У меня есть веб-сервис, работающий в Linux, который состоит из некоторого PHP-кода, который использует программу C ++ для выполнения тяжелой работы.Код PHP и C ++ выполняется один раз за транзакцию, а затем завершается.Он не является (пока) постоянным (т. Е. Демоном), и да, я знаю, что он был бы более эффективным, если бы он был.
По мере завершения транзакций накапливается различная информация (которую я все вместе называю "статистика "или" статистика ").Эта информация включает в себя информацию профилирования, такую как время выполнения для различных подзадач транзакции, и логическую информацию, такую как характер и результат транзакции.Эти показатели сильно зависят от приложения, поэтому обобщенные инструменты мониторинга и измерений, вероятно, здесь неуместны.
Я хочу начать записывать эту информацию, но не хочу, чтобы сам процесс записи влиял на производительность.В частности, я предполагаю, что я не хочу нести расходы на подключение к базе данных и разрыв каждой транзакции, или блокировать, например, при ожидании доступа для записи в файл.Я хотел бы амортизировать эту стоимость в течение многих транзакций, если это возможно.Меня не волнует, выполняется ли запись статистики в коде C ++ или PHP.
Мне интересно, был бы хороший подход - это что-то, что запускается как демон на самом сервере и получает пакеты статистики (возможно, JSONили protobufs или другой формат упаковки).Каналом доставки может быть сокет, труба или другой эффективный IPC.Эти пакеты будут собираться в пакеты и периодически сохраняться в базе данных или иным образом перемещаться за пределы сервера.Эффективность достигается за счет минимизации обработки каждого пакета и амортизации дорогостоящих операций со многими пакетами.
Мой первый вопрос: является ли подход, который я изложил выше, жизнеспособным и оптимальным?Есть ли другие проекты, которые я должен рассмотреть?
Мой второй вопрос: это похоже на то, что должно уже существовать.Существуют ли какие-либо общие инструменты для систем Linux, которые получают, собирают и пересылают пакеты статистики?