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.

Configuração de amostra:
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.

Observação

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.

Para obter detalhes sobre a integração do agente do navegador com agentes de rastreamento de backend, consulte o seguinte:

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.