2012-08-30 22 views
6

Estoy construyendo un servicio RESTful en Symfony2, usando el FOSRestBundle. Puedo rastrear el uso de la página en clientes web usando Google Analytics. Sin embargo, obviamente esto no va a funcionar para las solicitudes de clientes que no sean HTML.¿Cómo puedo rastrear el uso de API en Symfony2?

Antes de embarcarme en la instalación de Redis, servicios de redacción, despachadores de eventos, etc., ¿este problema ya se ha resuelto? ¿Hay alguna solución que no tenga un impacto serio en el rendimiento?

Basándome en las estadísticas del proyecto que estoy reemplazando, espero alrededor de 1,000 visitas por hora con un 90% de tráfico proveniente de los navegadores. No controlaré los clientes que no son HTML, por lo que agregar seguimiento no es una opción.

Necesito los datos por la misma razón por la que alguien necesita datos analíticos para hacer gráficos bonitos y brindar evidencia cuantitativa sobre dónde enfocar los recursos de desarrollo.

+4

Quizás podría buscar algo que analice su registro de acceso (sin impacto en el rendimiento) – greg0ire

+0

No es una mala idea. No sé mucho sobre Apache: ¿cómo puedo decirle que inicie sesión en el encabezado 'Aceptar' para cada solicitud? –

+0

Sé que puede personalizar el formato de registro. Consulte la documentación de la directiva [LogFormat] (http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#logformat). – greg0ire

Respuesta

1

Hay algunas opciones, y depende exactamente de la cantidad de información que necesita. Si solo desea conocer la actividad básica (cuántas llamadas a cada servicio web, cuándo, IP de origen, agente de usuario), los registros de Apache ya tienen toda esa información. Use CustomLog para agregar cualquier campo adicional que necesite. P.ej. usted ha mencionado el encabezado Accept, que se puede añadir la siguiente manera:

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

Si es GET, POST, PUT, etc. está contenida en la parte% r.

Si desea saber qué hay realmente en los datos POST o PUT, entonces es más difícil. La solución extrema es usar el módulo mod_dumpio. Eso registra toda la entrada del cliente (todos los encabezados, todas las cookies, todos los datos POST). Si las personas usan su API REST para cargar imágenes, entonces, para bien o para mal, obtendrá la imagen completa en su registro. Eso podría ser muy grande.

La solución que prefiero es registrar desde PHP: un registro personalizado en la parte superior de su script PHP, o cuando procesa las solicitudes. Luego tiene control total sobre qué registrar, el formato más fácil de analizar y también puede ponerlo en contexto (por ejemplo, registrar datos de texto, pero no registrar bytes de imágenes). En desarrollo y para sitios pequeños, hago esto en paralelo con el registro de Apache. Si Apache está tomando demasiada CPU, desactive el registro de apache o pase por alto a Apache por completo. (Actualmente estoy evaluando el built-in webserver in php 5.4 - tiene soporte para enrutamiento, por lo que podría ser muy adecuado para servicios web.)

BTW, analizar los registros del servidor es bueno hacerlo en paralelo con Google Analytics: te ayuda a apreciar la precisión de cada.

Cuestiones relacionadas