Configurer l'instrumentation des appels Ajax
Vous pouvez configurer l'instrumentation des appels Ajax dans Application Performance Monitoring.
Pour permettre le suivi de plusieurs niveaux, l'agent du navigateur APM ajoute un contexte de trace à l'aide d'en-têtes similaires à 'X-B3-*' pour les appels AJAX sortants. Ces en-têtes informent un agent/tracteur de serveur potentiel de la trace et de la portée qui ont déclenché l'appel Ajax, qui permet ensuite de déclarer le flux complet du navigateur vers les serveurs dorsaux en fonction du contexte propagé.
Par défaut, le comportement ci-dessus est appliqué à tous les appels AJAX qui partagent le même domaine et qui excluent les appels AJAX vers les domaines externes. On suppose que les domaines externes ne partagent pas le même environnement de surveillance APM. Dans les cas où cette logique ne s'applique pas, il est possible d'activer des en-têtes sur des appels au domaine externe et/ou de désactiver l'en-tête sur une partie de l'appel au même domaine.
apmrum.traceSupportingEndpoints = [
{ headers: [ ], hostPattern: 'https://((identity)|(console)).*' },
{ headers: [ 'APM' ], hostPattern: 'https://my-rest-server.*' }
]
La configuration ci-dessus indique que pour les URL commençant par 'identity
' ou 'console
', les en-têtes ne doivent pas être manipulés (contexte vide), mais pour celles commençant par 'my-rest-server
', l'agent de navigateur APM est présent idéalement, les en-têtes doivent être annotés avec contexte apm.
La configuration apmrum.traceSupportingEndpoints
est sensible à l'ordre de la définition. La définition des en-têtes des hostPattern
premiers correspondant à l'URL Ajax est utilisée. Si la première définition contient hostPattern: ".*"
, toutes les autres définitions sont ignorées. La configuration recommandée est d'utiliser systématiquement un préfixe ou un suffixe de l'URL Ajax pour créer la configuration souhaitée.
Échecs de spécification CORS causés par l'agent de navigateur APM
Dans certains cas, les demandes échouent dans un navigateur. Par exemple, cela se produit lorsque les appels GET
sont annotés avec les en-têtes B3
, ce qui déclenche une pré-vol.
Le serveur doit répondre avec un en-tête "Access-Control-Allow-Origin" correct à OPTIONS
et un appel GET
réel. En outre, le serveur doit marquer les en-têtes contextuels pertinents pour éviter tout problème avec eux.
Pour plus d'informations sur le protocole CORS (Cross Origin Resource Sharing), voir https://fetch.spec.whatwg.org/#cors-protocol.
Intégration de l'agent de navigateur avec des agents de trace dorsaux
Application Performance Monitoring peut intégrer l'agent de navigateur aux agents de trace dorsaux.
L'agent du navigateur enregistre et pousse le contexte de trace à ajax appelle une vue intégrée de l'activité du navigateur et de l'activité dorsale. Cela peut être fait à l'aide de différents types d'en-tête pour différents types d'agent de serveur dorsal. Ces en-têtes personnalisés seront ajoutés aux appels AJAX, ce qui rend nécessaire la validation des demandes de pré-vol pour CORS (Cross Origin Resource Sharing) requise. Pour plus d'informations sur le protocole CORS, voir https://fetch.spec.whatwg.org/#cors-protocol.
Lorsque le serveur n'est pas configuré pour gérer ces appels préalables, le navigateur ne gère pas les appels Ajax comme prévu et l'application peut ne pas fonctionner comme prévu. Pour éviter tout problème connexe, l'agent du navigateur APM vérifie les appels Ajax et ajoute des en-têtes personnalisés uniquement aux demandes qui ont une demande de pré-vol ou aux demandes qui vont au même domaine.
Les noms de domaine sont comparés en fonction du deuxième niveau et du domaine de premier niveau. Par exemple, api.oracle.com
sera considéré comme le même domaine que apex.oracle.com
.
Configurer des points d'extrémité de restauration avec des agents serveur
Lorsqu'un agent serveur est installé sur un système accessible avec une URL différente de celle du html, une configuration supplémentaire est nécessaire. Cette configuration informe l'agent du navigateur que l'ajout de l'en-tête de trace pertinent est souhaité pour ce serveur et que les demandes de pré-vol seront traitées de manière adéquate.
Exemple de configuration avec l'agent Java APM
Voir ci-dessous un exemple de configuration qui désactive la logique par défaut pour la reconnaissance du même domaine, mais qui permet de spécifier le modèle d'URL où l'agent Java APM est installé à l'aide de https://regexThatMatchesServersThatHaveServerAgent.*
. Les en-têtes de contexte d'agent Java APM ne seront utilisés que sur les appels Ajax effectués aux URL correspondant à ce modèle. Toutes les autres URL correspondent au modèle '.*' et ne seront pas annotées car le contexte est vide.
document.apmrum.traceSupportingEndpoints = [
{ headers: [ 'APM'], hostPattern: 'https://regexThatMatchesServersThatHaveServerAgent.*'},
{ headers: [ ], hostPattern: '.*'} // block headers for everything else
];
Exemple de configuration avec différents agents
/* 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: []},
]
En-têtes de propagation de contexte
Le tableau suivant présente les différents types d'en-têtes de propagation de contexte pris en charge par l'agent de navigateur APM :
Nom | En-têtes de propagation de contexte | Description |
---|---|---|
APM |
X-B3-TraceId X-B3-SpanId X-B3-Sampled X-ORACLE-APM-BA-VERSION |
Agent Java APM installé pour combiner les informations de trace côté serveur. |
B3-Single | b3 | Un seul en-tête b3 avec les informations de trace combinées dans la valeur. |
B3-Multi |
X-B3-TraceId X-B3-SpanId X-B3-Sampled |
B3 en-têtes avec une valeur répartie sur des en-têtes distincts. |
W3C | traceparent | Informations de traçage combinées dans un seul en-tête, comme spécifié par W3C. |
UberId | Uber-Trace-Id | L'en-tête uberId avec contexte de trace combiné en une seule valeur. |