Как я могу отслеживать использование API в Symfony2?

Я создаю службу RESTful в Symfony2, используя FOSRestBundle. Я могу отслеживать использование страниц в веб-клиентах с помощью Google Analytics. Однако это, очевидно, не будет работать для запросов не-HTML-клиентов.

Прежде чем я приступлю к установке Redis, написанию сервисов, диспетчеров событий и т. д., эта проблема уже решена? Есть ли решение, которое не оказывает серьезного влияния на производительность?

Основываясь на статистике проекта, который я заменяю, я ожидаю около 1000 посещений в час, при этом 90% трафика приходится на браузеры. Я не буду контролировать не-HTML-клиенты, поэтому добавить отслеживание не получится.

Мне нужны данные по той же причине, по которой кому-то нужны данные аналитики — для построения красивых графиков и предоставления количественных данных о том, на чем сосредоточить ресурсы для разработки.


person Dan Blows    schedule 30.08.2012    source источник
comment
Возможно, вы могли бы поискать что-то, что анализирует ваш журнал доступа (совсем не влияет на производительность)   -  person greg0ire    schedule 31.08.2012
comment
Неплохая идея. Я не очень разбираюсь в Apache - как я могу заставить его регистрировать заголовок Accept для каждого запроса?   -  person Dan Blows    schedule 31.08.2012
comment
Я знаю, что вы можете настроить формат журнала. См. документацию по директиве LogFormat.   -  person greg0ire    schedule 31.08.2012
comment
Ну вот! stackoverflow.com/questions/8464863/   -  person Max Małecki    schedule 31.08.2012
comment
Отличный вопрос. У меня та же проблема, что и у вас. Я очень хочу увидеть, кто может предложить самое чистое решение.   -  person Flukey    schedule 31.08.2012
comment
Ваш API будет использоваться конкретным устройством или это общедоступный API? Если нет нескольких SDK, например, для отслеживания на мобильном устройстве.   -  person Boris Guéry    schedule 31.08.2012
comment
@BorisGuéry API будет общедоступным для тех, у кого есть зарегистрированные учетные записи, поэтому я не думаю, что мы сможем это сделать.   -  person Dan Blows    schedule 31.08.2012
comment
Идея анализа файлов журналов — хорошая идея, но она не позволяет провести детальный анализ отслеживания. На самом деле я не знаю ни о каком подключаемом решении, и я не думаю, что оно когда-либо будет, поскольку оно действительно зависит от приложения. Вы бы предпочли использовать EventDispatcher и пользовательские события в сочетании с настраиваемым регистратором. Это на самом деле не так много работы. Потому что вы, скорее всего, будете правильно использовать Event, чтобы сначала расширить свое приложение и просто внедрить регистратор для аудита действий.   -  person Boris Guéry    schedule 31.08.2012


Ответы (1)


Есть несколько вариантов, и это зависит от того, сколько именно информации вам нужно. Если вы просто хотите знать основную активность (сколько обращений к каждой веб-службе, когда, исходный IP-адрес, пользовательский агент), то в журналах apache уже есть вся эта информация. Используйте CustomLog, чтобы добавить любые дополнительные поля, которые вам нужны. Например. вы упомянули заголовок Accept, который можно добавить следующим образом:

CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" \"%{Accept}i\""

Если это GET, POST, PUT и т. д. содержится в части %r.

Если вы хотите знать, что на самом деле находится в данных POST или PUT, то это сложнее. Крайним решением является использование модуля mod_dumpio. Это регистрирует весь ввод клиента (все заголовки, все файлы cookie, все данные POST). Если люди используют ваш REST API для загрузки изображений, то, хорошо это или плохо, вы получите полное изображение в своем журнале. Это может стать очень большим.

Решение, которое я предпочитаю, состоит в том, чтобы вести журнал с PHP: настраиваемый журнал либо в верхней части вашего PHP-скрипта, либо при обработке запросов. Затем у вас есть полный контроль над тем, что записывать в журнал, самый простой формат для анализа, и вы также можете помещать его в контекст (например, регистрировать текстовые данные, но не регистрировать байты изображения). В разработке и для небольших сайтов я делаю это параллельно с логированием апача. Если Apache использует слишком много ресурсов ЦП, отключите ведение журнала Apache или полностью обойдите Apache. (В настоящее время я оцениваю встроенный веб-сервер в php 5.4 - он поддерживает маршрутизацию, поэтому может быть очень подходящим для веб-сервисов.)

Кстати, анализ журналов серверов полезно проводить параллельно с Google Analytics: это поможет вам оценить точность каждого из них.

person Darren Cook    schedule 06.09.2012