Configurer l'instrumentation des appels Ajax
Vous pouvez configurer l'instrumentation des appels Ajax dans Application Performance Monitoring.
Pour permettre le suivi inter-niveaux, l'agent de navigateur APM ajoute un contexte de trace à l'aide d'en-têtes semblables à "X-B3-*" aux appels Ajax sortants. Ces en-têtes informent un agent/ traceur de serveur potentiel de la trace et de la portée qui ont déclenché l'appel Ajax, qui permet ensuite de générer des rapports sur le flux complet du navigateur vers les serveurs back-end 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 excluent les appels Ajax aux domaines externes. L'hypothèse est que les domaines externes ne partagent pas le même environnement de surveillance APM. Si cette logique ne s'applique pas, il est possible d'activer les en-têtes sur les appels vers le domaine externe et/ou de désactiver l'en-tête vers une partie de l'appel vers le 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 qui commencent par 'identity
' ou 'console
', les en-têtes ne doivent pas être manipulés (contexte vide), mais pour ceux qui commencent par 'my-rest-server
', l'agent de navigateur APM est présent, donc idéalement, les en-têtes doivent être annotés avec le contexte apm.
La configuration apmrum.traceSupportingEndpoints
est sensible à l'ordre de la définition. La définition des en-têtes du premier élément hostPattern
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 consiste à utiliser systématiquement un préfixe ou un suffixe de l'URL Ajax pour créer la configuration souhaitée.
Echecs CORS causés par l'agent de navigateur APM
Dans certains cas, l'agent de navigateur entraîne l'échec des demandes dans un navigateur. Par exemple, cela se produit lorsque les appels GET
sont annotés avec des en-têtes B3
, ce qui déclenche une prévérification.
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 pertinents relatifs au contexte comme étant autorisés à éviter tout problème.
Pour plus d'informations sur le protocole CORS (Cross Origin Resource Sharing), reportez-vous à https://fetch.spec.whatwg.org/#cors-protocol.
Intégration de l'agent de navigateur aux agents de trace back-end
Application Performance Monitoring peut intégrer l'agent de navigateur aux agents de trace back-end.
L'agent de navigateur enregistre et transmet le contexte de trace aux appels Ajax pour obtenir une vue intégrée de l'activité du navigateur et de l'activité back-end. Pour ce faire, vous pouvez utiliser différents types d'en-tête pour différents types d'agent de serveur back-end. Ces en-têtes personnalisés seront ajoutés aux appels Ajax, ce qui rend nécessaire la validation CORS (Cross Origin Resource Sharing) avec les demandes de prévérification. Pour plus d'informations sur le protocole CORS, reportez-vous au protocole https://fetch.spec.whatwg.org/#cors.
Lorsque le serveur n'est pas configuré pour gérer de tels appels avant vol, 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 lié, l'agent de navigateur APM vérifie les appels Ajax et ajoute des en-têtes personnalisés uniquement aux demandes qui comportent une ou plusieurs demandes de prévérification et qui accèdent au même domaine.
Les noms de domaine sont comparés en fonction des domaines de niveau supérieur et de second niveau. Par exemple, api.oracle.com
sera considéré comme le même domaine que apex.oracle.com
.
Configuration des adresses Rest avec les agents de serveur
Lorsqu'un agent serveur est installé sur un système auquel vous accédez avec une URL différente de celle du fichier 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 approprié est souhaité pour ce serveur, et les demandes de prévérification seront traitées de manière appropriée.
Exemple de configuration avec l'agent Java APM
Reportez-vous à un exemple de configuration qui désactive la logique par défaut sur la reconnaissance du même domaine, mais permet d'indiquer 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 vers des 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ête 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 VERSION X-ORACLE-APM-BA-VERSION |
Agent Java APM installé pour combiner les informations de trace côté serveur. |
B3-Single | b3 | En-tête b3 unique avec des informations de trace combinées en valeur. |
B3-Multi |
X-B3-TraceId X-B3-SpanId X-B3-Sampled |
En-têtes B3 avec valeur répartie sur des en-têtes distincts. |
W3C | trace parent | Informations d'étendue de trace combinées dans un en-tête unique, comme indiqué par W3C. |
UberId | Uber-Trace-Id | En-tête uberId avec contexte de trace combiné en une seule valeur. |