Configurar instrumentación de llamadas Ajax

Puede configurar la instrumentación de llamadas de ajax en Application Performance Monitoring.

Para permitir que se realice el rastreo entre niveles, el agente de explorador de APM agrega un contexto de rastreo con cabeceras similares a 'X-B3-*' a las llamadas ajax salientes. Estas cabeceras informan a un posible agente/trazador de servidor del rastreo y el intervalo que disparó la llamada ajax que, a continuación, permite informar sobre el flujo completo del explorador en los servidores de backend en función del contexto propagado.

Por defecto, el comportamiento anterior se aplica a todas las llamadas ajax que comparten el mismo dominio y excluyen las llamadas ajax a dominios externos. La suposición es que los dominios externos no comparten el mismo entorno de supervisión de APM. En los casos en los que esta lógica no se aplica, es posible activar cabeceras en llamadas al dominio externo y/o desactivar la cabecera para alguna de las llamadas al mismo dominio.

Configuración de muestra:
apmrum.traceSupportingEndpoints =  [ 
    { headers: [ ], hostPattern: 'https://((identity)|(console)).*' },
    { headers: [ 'APM' ], hostPattern: 'https://my-rest-server.*' }
]

La configuración anterior indica que para las URL que empiezan por 'identity' o 'console', las cabeceras no se deben manipular (contexto vacío), sino para las que empiezan por 'my-rest-server', el agente de explorador de APM está presente, por lo tanto, idealmente, las cabeceras se deben anotar con contexto de apm.

Nota

La configuración apmrum.traceSupportingEndpoints es sensible al orden de la definición. Se utiliza la definición de cabeceras del primer hostPattern que coincide con la URL de ajax. Si la primera definición tiene hostPattern: ".*", se ignoran todas las demás definiciones. La configuración recomendada es utilizar de forma consistente un prefijo o sufijo de la URL de ajax para crear la configuración deseada.

Fallos de CORS provocados por el agente de explorador de APM

En algunos casos, el agente de explorador hace que las solicitudes fallen en un explorador. Por ejemplo, esto sucede cuando las llamadas a GET se anotan con cabeceras B3, lo que dispara un pre vuelo.

El servidor debe responder con una cabecera "Access-Control-Allow-Origin" correcta a OPTIONS y una llamada GET real. Además, el servidor debe marcar las cabeceras relevantes relacionadas con el contexto como permitidas para evitar problemas con ellas.

Para obtener información sobre el protocolo CORS (uso compartido de recursos de origen cruzado), consulte https://fetch.spec.whatwg.org/#cors-protocol.

Integración de agente de explorador con agentes de rastreo de backend

Application Performance Monitoring puede integrar el agente del explorador con agentes de rastreo de backend.

El agente del explorador registra y transfiere el contexto de rastreo a las llamadas ajax para obtener una vista integrada de la actividad del explorador y la actividad de backend. Esto se puede hacer mediante diferentes tipos de cabeceras para diferentes tipos de agentes de servidor backend. Estas cabeceras personalizadas se agregarán a las llamadas ajax, lo que da como resultado la necesidad de solicitudes de preflight para la validación de CORS (Uso compartido de recursos de origen cruzado). Para obtener información sobre el protocolo CORS, consulte el protocolo https://fetch.spec.whatwg.org/#cors.

Cuando el servidor no está configurado para manejar dichas llamadas de preclight, el explorador no maneja las llamadas ajax como se esperaba y es posible que la aplicación no funcione como se esperaba. Para evitar problemas relacionados, el agente del explorador de APM comprueba las llamadas ajax y agrega cabeceras personalizadas solo a las solicitudes que tienen una solicitud de preflight o solicitudes que van al mismo dominio.

Los nombres de dominio se comparan según el segundo nivel y el dominio de nivel superior. Por ejemplo, api.oracle.com se considerará el mismo dominio que apex.oracle.com.

Para obtener más información sobre la integración del agente de explorador con agentes de rastreo de backend, consulte lo siguiente:

Configurar puntos finales de reinicio con agentes de servidor

Cuando se instala un agente de servidor en un sistema al que se accede con una URL diferente a la del html, se necesita alguna configuración adicional. Esta configuración informará al agente del explorador de que se desea agregar la cabecera de rastreo correspondiente para ese servidor, y las solicitudes de resaltado previo se gestionarán adecuadamente.

Configuración de ejemplo con el agente Java de APM

Consulte a continuación una configuración de ejemplo que desactiva la lógica por defecto al reconocer el mismo dominio, pero permite especificar el patrón de URL donde se instala el agente Java de APM con https://regexThatMatchesServersThatHaveServerAgent.*. Las cabeceras de contexto del agente Java APM solo se utilizarán en llamadas ajax realizadas a URL que coincidan con este patrón. El resto de URL coinciden con el patrón '.*' y no se anotarán porque el contexto está vacío.

document.apmrum.traceSupportingEndpoints =  [
    { headers: [ 'APM'], hostPattern: 'https://regexThatMatchesServersThatHaveServerAgent.*'},
    { headers: [ ], hostPattern: '.*'} // block headers for everything else
];

Configuración de ejemplo con diferentes agentes

/* sample configuration for an app running on 
* sample.oracle.com, by default 'APM' headers
* are added for ajax-calls to data.oracle.com
* (same domain) so no configuration needed in
* that scenario.
*/
document.apmrum.traceSupportingEndpoints = [
 /* apm server agent running on api.oracledata.com servers */
  { hostPattern: 'https://api.oracledata.com', headers: [ 'APM']},

 /* oracle functions uses B3 header for integration */
 { hostPattern: 'https://functions.oraclecloud.com', headers: [ 'B3-Multi']}, 

  /* more complex configuration withregexp host and multiple header types combined */   
   { hostPattern: 'https://*.extern.*.com', headers: ['W3C', 'B3-Multi']},

 /* server has no agent therefore don't send headers */
  { hostPattern: 'https://info.oracle.com', headers: []}, 
]

Cabeceras de Propagación de Contexto

En la siguiente tabla se muestran los diferentes tipos de cabeceras de propagación de contexto que soporta el agente de explorador de APM:

Nombre Cabeceras de Propagación de Contexto Descripción
APM

X-B3-TraceId

X-B3-SpanId

X-B3-Sampled

X-ORACLE-APM-BA-VERSION

APM Java Agent se ha instalado para combinar la información de rastreo del servidor.
B3-Single b3 Cabecera b3 única con información de rastreo combinada en valor.
B3-Multi

X-B3-TraceId

X-B3-SpanId

X-B3-Sampled

Cabeceras B3 con valor distribuido en cabeceras separadas.
W3C traceparent Información de rastreo combinado en una sola cabecera especificada por W3C.
UberId Uber-Trace-Id Cabecera uberId con contexto de rastreo combinado en un solo valor.