Trazabilidad en las peticiones

En este mundillo donde cada aplicación/servicio se ha de comunicar con otras tantas, es crucial mantener una trazabilidad entre los servicios, de forma que podamos revisar las trazas y distinguir las peticiones/respuestas, recuperando aquellas que se correspondan con una petición concreta.

Para poder correlar las peticiones, necesitamos un identificador único que se propague en todas las peticiones hacia el resto de aplicaciones/servicios y que éstos, para cada traza que escriban relacionada con esa petición, muestren el identificador en la traza.

He visto varios blogs en los que se envía el identificador en la cabecera HTTP de la petición para posteriormente recuperarlo a través de un filtro. Esta propuesta me parece acertada siempre y cuando todas las aplicaciones/servicios a integrar se comuniquen mediante transporte HTTP pero ¿y si se utiliza JMS? ¿Y si nos conectamos con un servicio implementado con tecnología Tibco vía EMS o RV?

La alternativa que propongo es simple: La clase Request debe contener un campo identificativo de la petición y éste siempre se debe informar cuando invoquemos a otra aplicación/servicio. De este modo, independientemente al tipo de transporte, siempre tendremos un identificador único de la petición y podremos correlar todas las peticiones relacionadas.

En la primera llamada, el identificador se genera automáticamente (UUID.randomUUID().toString()).

En cuanto a cómo mostrar el identificador en las trazas, en el controlador que recibe la petición, incluimos el siguiente código:

MDC.put("TRACKING", request.getTracking());

Y en el patrón de Logback o Log4J, nos aseguramos de incluir %X{TRACKING}. Ejemplo:

%d{yyyy/MM/dd HH:mm:ss.SSS} %-5p [%c{1}] %X{TRACKING}%m%n

De este modo, todas las trazas en ese hilo de ejecución contendrán el identificador único de forma automática y no tendremos que ir añadiendo el identificador de forma manual cada vez que queramos sacar una traza.

Advertisements

One thought on “Trazabilidad en las peticiones

Comments are closed.