Configurar Instrumentação de Chamadas do Ajax
Você pode configurar a instrumentação de chamadas ajax no serviço Application Performance Monitoring.
Para permitir que o rastreamento entre camadas seja feito, o agente do navegador APM adiciona um contexto de rastreamento usando cabeçalhos semelhantes a 'X-B3-*' às chamadas ajax de saída. Esses cabeçalhos informam um possível agente/rastreador do servidor sobre o rastreamento e a extensão que acionou a chamada ajax, que permite reportar o fluxo completo do browser para os servidores de backend com base no contexto propagado.
Por padrão, o comportamento acima é aplicado a todas as chamadas ajax que compartilham o mesmo domínio e excluem as chamadas ajax a domínios externos. O pressuposto é que os domínios externos não compartilham o mesmo ambiente de monitoramento do APM. Nos casos em que essa lógica não se aplica, é possível ativar cabeçalhos em chamadas para o domínio externo e/ou desativar o cabeçalho em algumas chamadas para o mesmo domínio.
apmrum.traceSupportingEndpoints = [
{ headers: [ ], hostPattern: 'https://((identity)|(console)).*' },
{ headers: [ 'APM' ], hostPattern: 'https://my-rest-server.*' }
]
A configuração acima indica que, para urls que começam com 'identity
' ou 'console
', os cabeçalhos não devem ser manipulados (contexto vazio), mas para aqueles que começam com 'my-rest-server
', o agente do navegador APM está presente, portanto, idealmente, os cabeçalhos devem ser anotados com o contexto do apm.
A configuração apmrum.traceSupportingEndpoints
é sensível à ordem da definição. A definição dos cabeçalhos do primeiro hostPattern
que corresponde ao url ajax é usada. Se a primeira definição tiver hostPattern: ".*"
, todas as outras definições serão ignoradas. A configuração recomendada é usar consistentemente um prefixo ou sufixo do url do ajax, para criar a configuração desejada.
Falhas de CORS causadas pelo Agente do Browser do APM
Em alguns casos, o agente do navegador faz com que as solicitações falhem em um navegador. Por exemplo, isso acontece quando chamadas GET
são anotadas com cabeçalhos B3
, que aciona um pré-voo.
O servidor precisa responder com um cabeçalho ``Access-Control-Allow-Origin` correto para OPTIONS
e a chamada real GET
. Além disso, o servidor precisa marcar os cabeçalhos relevantes relacionados ao contexto como permitido para evitar problemas com eles.
Para obter informações sobre o protocolo CORS (Compartilhamento de Recursos de Origem Cruzada), consulte https://fetch.spec.whatwg.org/#cors-protocol.
Integração do Agente do Browser com Agentes de Rastreamento de Backend
O serviço Application Performance Monitoring pode integrar o agente do browser com agentes de rastreamento de backend.
O agente do navegador registra e envia o contexto de rastreamento para chamadas ajax para uma visão integrada da atividade do navegador e da atividade de backend. Isso pode ser feito usando diferentes tipos de cabeçalhos para diferentes tipos de agentes de servidor de backend. Esses cabeçalhos personalizados serão adicionados a chamadas ajax, o que resulta na necessidade de solicitações de comprovação para validação de CORS (Compartilhamento de Recursos de Origem Cruzada) é necessária. Para obter informações sobre o protocolo CORS, consulte o protocolo https://fetch.spec.whatwg.org/#cors.
Quando o servidor não estiver configurado para tratar essas chamadas de comprovação, o browser não tratará chamadas ajax conforme esperado e o aplicativo pode não funcionar conforme esperado. Para evitar problemas relacionados, o agente do navegador do APM verifica as chamadas do ajax e adiciona cabeçalhos personalizados somente a solicitações que tenham uma solicitação de comprovação ou solicitações que vão para o mesmo domínio.
Os nomes de domínio são comparados com base no segundo nível e no domínio de nível superior. Por exemplo, api.oracle.com
será considerado o mesmo domínio que apex.oracle.com
.
Configurar Pontos Finais Rest com Agentes de Servidor
Quando um agente do servidor é instalado em um sistema que é acessado com um url diferente do html, algumas configurações adicionais são necessárias. Essa configuração informará ao agente do navegador que a adição do cabeçalho de rastreamento relevante é desejada para esse servidor e as solicitações de comprovação serão tratadas adequadamente.
Exemplo de Configuração com o Agente Java do APM
Veja abaixo uma configuração de amostra que desativa a lógica padrão no reconhecimento do mesmo domínio, mas permite especificar o padrão de url em que o Agente Java do APM está instalado usando https://regexThatMatchesServersThatHaveServerAgent.*
. Os cabeçalhos de contexto do Agente Java do APM só serão usados em chamadas ajax feitas a urls que correspondam a esse padrão. Todos os outros urls correspondem ao padrão '.*' e não serão anotados porque o contexto está vazio.
document.apmrum.traceSupportingEndpoints = [
{ headers: [ 'APM'], hostPattern: 'https://regexThatMatchesServersThatHaveServerAgent.*'},
{ headers: [ ], hostPattern: '.*'} // block headers for everything else
];
Exemplo de Configuração com Agentes Diferentes
/* 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: []},
]
Cabeçalhos de Propagação de Contexto
A tabela a seguir mostra os diferentes tipos de cabeçalhos de propagação de contexto que o agente do browser APM suporta:
Nome | Cabeçalhos de Propagação de Contexto | Descrição |
---|---|---|
APM |
X-B3-TraceId X-B3-SpanId X-B3-Sampled X-ORACLE-APM-BA-VERSÃO |
Agente Java do APM instalado para combinar as informações de rastreamento do servidor. |
B3-Single | b3 | Cabeçalho b3 único com informações de rastreamento combinadas em valor. |
B3-Multi |
X-B3-TraceId X-B3-SpanId X-B3-Sampled |
Cabeçalhos B3 com valor distribuído por cabeçalhos separados. |
W3C | rastreador | Informações de rastreamento combinado em cabeçalho único, conforme especificado por W3C. |
UberId | Uber-Trace-Id | O cabeçalho uberId com contexto de rastreamento combinado em valor único. |