• /
  • EnglishEspañol日本語한국어Português
  • EntrarComeçar agora

Esta tradução de máquina é fornecida para sua comodidade.

Caso haja alguma divergência entre a versão em inglês e a traduzida, a versão em inglês prevalece. Acesse esta página para mais informações.

Criar um problema

API do agente Java: instrumento de chamadas externas, mensagens, armazenamento de dados, framework web

O agente Java da New Relic coleta e relata informações sobre transação da web e transação fora da web, como tarefas em segundo plano. O agente deverá suportar o framework automaticamente, sem necessidade de modificar o código da sua aplicação. No entanto, além do código customizado e da estrutura ou tecnologia não listada na documentação Compatibilidade e requisitos para o agente Java , algumas implementações da estrutura suportada podem exigir instrumentação personalizada.

Este documento descreve como usar a API agente do Java para instrumentar chamadas externas, estrutura de mensagens, Distributed tracing, armazenamento de dados e estrutura web. Para obter melhores resultados ao usar a API, certifique-se de ter a versão mais recente do agente Java. Várias API usadas nos exemplos requerem o agente Java 3.36.0 ou superior.

API externa

O External API permite que o aplicativo relate chamadas de serviço externas para a New Relic. Essas informações aparecem na páginaExternal services do APM. Para relatar atividades externas HTTP, basta criar uma instância de ExternalParameters usando o construtor HttpParameters e chamar reportAsExternal(ExternalParameters parameters) no método de rastreamento que você deseja relatar.

Construtores de parâmetros externos

Existem vários construtores para criar ExternalParameters:

  • DatastoreParameters
  • HttpParameters
  • GenericParameters
  • MessageConsumeParameters
  • MessageProduceParameters

Esses construtores criam o objeto de parâmetro de entrada para a chamada de API reportAsExternal deTracedMethod . Esses objetos de parâmetro são usados para vincular chamadas externas HTTP por meio de distributed tracing, rastrear chamadas externas para um armazenamento de dados, rastrear chamadas externas para um armazenamento de dados com processamento de consulta lenta adicional, bem como rastrear chamadas entre produtores de mensagens e consumidores.

Importante

Todos os métodos desta classe têm o potencial de expor informações privadas confidenciais. Tenha cuidado ao criar os argumentos, prestando atenção especial aos URIs e aos valores de string.

API distributed tracing

A API distributed tracing permite que o agente Java da New Relic vincule transações entre aplicativos que são instrumentados pelo agente Java da New Relic ou por outra ferramenta padrão de instrumentação aberta. Ele usa um wrapper para permitir que o agente leia/grave cabeçalhos nas solicitações.

Invólucro de cabeçalhos

O agente usa a interface Headers para ler/gravar cabeçalhos em uma solicitação. Tanto o cliente quanto o servidor precisam implementar esta interface usando as classes de sua framework de comunicação. Por exemplo:

Implementação distributed tracing usando wrappers

Usando o objeto wrapper descrito na seção anterior, é possível ativar o agente Java para relatar rastreio no lado do cliente e do servidor. Por exemplo:

Neste código de exemplo, o agente está configurado para relatar uma chamada externa usando distributed tracing no cliente que está iniciando a solicitação. Essas etapas podem ser resumidas da seguinte forma:

  1. Implemente Headers usando classes framework no cliente.
  2. Use insertDistributedTraceHeaders(Headers headers) para que o agente adicione cabeçalhos apropriados à solicitação de saída.

Neste código de exemplo, o agente está configurado para ler os cabeçalhos da solicitação. Essas etapas podem ser resumidas da seguinte forma:

  1. Implemente Headers usando classes framework no servidor.
  2. Use acceptDistributedTraceHeaders(TransportType transportType, Headers headers) para vincular esta transação à transação que fez a chamada.

API de rastreamento multiaplicativo

Importante

O rastreamento multiaplicativo foi descontinuado a partir da versão 7.4.0 do agente e será removido em uma versão futura do agente.

Em vez de usar rastreamento multiaplicativo, recomendamos nosso recurso distributed tracing . distributed tracing é uma melhoria no recurso de rastreamento multiaplicativo e é recomendado para sistemas distribuídos grandes.

A API de rastreamento multiaplicativo (CAT) permite que o agente Java da New Relic vincule a transação através do aplicativo monitor da New Relic. A API usa wrappers de cliente e servidor que permitem ao agente ler cabeçalhos de solicitações e adicionar cabeçalhos às respostas.

Wrappers de cliente

Para que o agente grave cabeçalhos de solicitação de saída no cliente que inicia a solicitação, use a interface OutboundHeaders . Por exemplo:

Para que o agente leia os cabeçalhos de resposta de entrada no cliente que recebe a resposta, implemente o InboundHeaders. Por exemplo:

Wrappers de servidor

Para que o agente obtenha cabeçalhos de solicitação da web, você deve estender a classe ExtendedRequest :

Para que o agente defina os cabeçalhos de resposta da Web, implemente a interface Response :

Implementação CAT usando wrappers

Usando os objetos wrapper descritos nas seções anteriores, é possível ativar o agente Java para fazer rastreamento multiaplicativo (CAT) no lado do cliente e do servidor. Por exemplo:

Neste código de exemplo, o agente está configurado para relatar uma chamada externa usando CAT no cliente que está iniciando a solicitação. Essas etapas podem ser resumidas da seguinte forma:

  1. Implemente OutboundHeaders e InboundHeaders usando classes framework no cliente.
  2. Use addOutboundRequestHeaders(OutboundHeaders outboundHeaders) para que o agente adicione cabeçalhos apropriados à solicitação de saída.
  3. Crie o objeto ExternalParameters usando o construtor HttpParameters e forneça cabeçalhos de resposta de entrada.
  4. Reporte como uma solicitação externa usando reportAsExternal(ExternalParameters params).

Neste código de exemplo, o agente está configurado para relatar uma chamada externa usando CAT no servidor que está respondendo à solicitação. Essas etapas podem ser resumidas da seguinte forma:

  1. Implemente Response e estenda a classe ExtendedRequest usando classes framework no servidor.

  2. Use setWebRequest(ExtendedRequest request) e setWebResponse(Response response) para converter a transação em uma transação da web e, juntos, fornecer ao agente os cabeçalhos de solicitação de entrada e um local para registrar os cabeçalhos de saída.

    É importante usar setWebRequest(ExtendedRequest request) e setWebResponse(Response response) juntos, porque o nome da transação depende do objeto de solicitação e o código de resposta depende do objeto de resposta.

  3. Use addOutboundResponseHeaders() para que o agente adicione cabeçalhos apropriados à resposta de saída.

  4. Marque o final da resposta com uma chamada para markResponseSent().

API de mensagens

A API de mensagens permite que o aplicativo relate a interação com agentes de fila de mensagens. Ele se baseia na API externa, fornecendo MessageConsumerParametersMessage e MessageConsumerParameters.

Esta API gera as métricas necessárias para identificar a interação do message broker. A interface usará essas métricas para exibir dados de mensagens, incluindo segmentos em transações com a ação e contagem apropriada (mensagem colocada ou mensagem recebida), uma guia dedicada de mensagens no rastreamento da transação e muito mais. Fornecer cabeçalhos de entrada e saída para a API também permite que o agente adicione cabeçalhos CAT e registre métricas CAT, o que permite que a interface desenhe mapas de serviço que mostram conexões entre aplicativos.

Importante

A API de mensagens depende da comunicação bidirecional entre produtores e consumidores. Se o seu produtor não receber uma confirmação de um consumidor, como em um padrão disparar e esquecer, a API de mensagens não refletirá com precisão a interação com os agentes de fila de mensagens.

O exemplo a seguir demonstra como instrumentar uma biblioteca JMS fictícia.

Para simplificar, o agente assume que sendMessageToQueue sempre coloca uma mensagem em uma fila nomeada. Na realidade, uma mensagem pode ser enviada para diferentes tipos de destino, incluindo filas nomeadas, filas temporárias, tópicos e tópicos temporários. A API fornece uma enumeração para relatar mensagens para diferentes tipos de destino: NAMED_QUEUE, TEMP_QUEUE, NAMED_TOPIC, TEMP_TOPIC. É importante especificar o tipo de destino apropriado porque a interface exibirá os nomes das filas nomeadas e dos tópicos nomeados e omitirá os nomes das filas temporárias e dos tópicos temporários.

Se a biblioteca for capaz de transmitir cabeçalhos CAT, um objeto OutboundHeaders será fornecido à API para que o agente possa adicionar cabeçalhos CAT.

API de armazenamento de dados

Quando um método de rastreamento é relatado como uma chamada de armazenamento de dados externo, a chamada é mostrada na página banco de dados do APM. Como os armazenamentos de dados são externos ao aplicativo em execução, o método é relatado como atividade do armazenamento de dados usando o método reportAsExternal(ExternalParameters params) . A única diferença é que um construtor diferente, DatastoreParameters, é usado para criar o objeto ExternalParameters apropriado.

API de armazenamento de dados: Consulta lenta

Esta chamada de API fornece o mesmo comportamento que a chamada de API de armazenamento de dados e o estende para permitir o rastreamento de informações de consulta lenta . O mesmo método e construtor reportAsExternal(ExternalParameters params) são usados, mas com um método construtor adicional.

API WebFrameworks

A API WebFrameworks permite que o agente relate informações adicionais de identificação sobre o aplicativo.

// Set the dispatcher name and version which is reported to APM.
// The dispatcherName is intended to represent the type of server that this
// application is running on such as: Tomcat, Jetty, Netty, etc.
NewRelic.setServerInfo(String dispatcherName, String version)
// Set the app server port which is reported to APM.
NewRelic.setAppServerPort(int port)
// Set the instance name in the environment.
// A single host:port may support multiple JVM instances.
// The instance name is intended to help identify a specific JVM instance.
NewRelic.setInstanceName(String instanceName)

Dica

Esses valores podem ser definidos apenas uma vez. As chamadas subsequentes não terão efeito.

Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.