• EnglishEspañol日本語한국어Português
  • Inicia sesiónComenzar ahora

Te ofrecemos esta traducción automática para facilitar la lectura.

En caso de que haya discrepancias entre la versión en inglés y la versión traducida, se entiende que prevalece la versión en inglés. Visita esta página para obtener más información.

Crea una propuesta

Agente de Java API: Instrumentar de llamadas externas, mensajería, almacenamiento de datos, marco web

El agente de Java de New Relic recopila y reporta información sobre transacciones web y transacciones no web, como tareas en segundo plano. El agente debe soportar el marco del instrumento automáticamente, sin necesidad de modificar el código de su aplicación. Sin embargo, además del código personalizado y el marco o la tecnología que no figuran en la documentación Compatibilidad y requisitos para el agente de Java , algunas implementaciones del marco compatible pueden requerir instrumentación personalizada.

Este documento describe cómo utilizar el API del agente de Java para implementar llamadas externas, marco de mensajería, Distributed tracing, almacenes de datos y marco web. Para obtener mejores resultados al utilizar la API, asegúrese de tener la última versión del agente de Java. Varias API utilizadas en los ejemplos requieren agente de Java 3.36.0 o superior.

API externa

El External API permite que la aplicación informe llamadas de servicios externos a New Relic. Esta información aparece en la páginaExternal services en APM. Para informar la actividad externa HTTP, simplemente cree una instancia de ExternalParameters usando el constructor HttpParameters y llame a reportAsExternal(ExternalParameters parameters) en el método traza que desea informar.

Constructores de parámetros externos

Hay varios constructores para crear ExternalParameters:

  • DatastoreParameters
  • HttpParameters
  • GenericParameters
  • MessageConsumeParameters
  • MessageProduceParameters

Estos constructores crean el objeto de parámetro de entrada para la llamada API reportAsExternal deTracedMethod . Estos objetos de parámetros se utilizan para cosas como vincular llamadas externas HTTP a través de distributed tracing, rastrear llamadas externas a un almacenamiento de datos, rastrear llamadas externas a un almacenamiento de datos con procesamiento adicional de consulta lenta, así como rastrear llamadas entre productores de mensajes y consumidores.

Importante

Todos los métodos de esta clase tienen el potencial de exponer información privada confidencial. Tenga cuidado al crear los argumentos, prestando especial atención a los URI y los valores de cadena.

Rastreo distribuido API

La API de rastreo distribuida permite al agente de Java New Relic vincular transacciones entre aplicaciones instrumentadas por el agente de Java New Relic o por otra herramienta estándar de instrumentación abierta. Utiliza un contenedor para permitir que el agente lea/escriba encabezados de solicitudes.

Envoltorio de encabezados

El agente utiliza la interfaz Headers para leer/escribir encabezados de una solicitud. Tanto el cliente como el servidor necesitan implementar esta interfaz utilizando las clases de su framework de comunicaciones. Por ejemplo:

Implementación de rastreo distribuido usando wrappers

Utilizando el objeto contenedor descrito en la sección anterior, puede permitir que el agente de Java informe la traza en el lado del cliente y del servidor. Por ejemplo:

En este código de muestra, el agente está configurado para reportar una llamada externa usando rastreo distribuido en el cliente que inicia la solicitud. Estos pasos se pueden resumir de la siguiente manera:

  1. Implemente Headers utilizando clases framework en el cliente.
  2. Utilice insertDistributedTraceHeaders(Headers headers) para que el agente agregue encabezados adecuados a la solicitud saliente.

En este código de muestra, el agente está configurado para leer los encabezados de la solicitud. Estos pasos se pueden resumir de la siguiente manera:

  1. Implemente Headers utilizando clases framework en el servidor.
  2. Utilice acceptDistributedTraceHeaders(TransportType transportType, Headers headers) para vincular esta transacción a la transacción que realizó la llamada.

API de seguimiento multiaplicación

Importante

El seguimiento de aplicaciones múltiples ha quedado obsoleto a partir de la versión 7.4.0 del agente y se eliminará en una versión futura del agente.

En lugar de utilizar el rastreo multiaplicación, recomendamos nuestra característica rastreo distribuido . rastreo distribuido es una mejora de la característica de rastreo multiaplicación y se recomienda para sistemas distribuidos grandes.

La API de seguimiento de múltiples aplicaciones (CAT) permite al agente de Java de New Relic vincular transacciones a través del monitor de aplicaciones de New Relic. La API utiliza contenedores de cliente y servidor que permiten al agente leer encabezados de solicitudes y agregar encabezados a las respuestas.

Envoltorios de clientes

Para que el agente escriba encabezados de solicitud salientes en el cliente que inicia la solicitud, utilice la interfaz OutboundHeaders . Por ejemplo:

Para que el agente lea los encabezados de respuesta entrantes en el cliente que recibe la respuesta, implemente InboundHeaders. Por ejemplo:

Envoltorios de servidor

Para que el agente obtenga encabezados de solicitud web, debe extender la clase ExtendedRequest :

Para que el agente configure los encabezados de respuesta web, implemente la interfaz Response :

Implementación CAT usando contenedores

Utilizando los objetos contenedores descritos en las secciones anteriores, puede habilitar al agente de Java para realizar seguimiento de múltiples aplicaciones (CAT) en el lado del cliente y del servidor. Por ejemplo:

En este código de muestra, el agente está configurado para informar una llamada externa mediante CAT en el cliente que inicia la solicitud. Estos pasos se pueden resumir de la siguiente manera:

  1. Implemente OutboundHeaders y InboundHeaders utilizando clases framework en el cliente.
  2. Utilice addOutboundRequestHeaders(OutboundHeaders outboundHeaders) para que el agente agregue encabezados adecuados a la solicitud saliente.
  3. Cree un objeto ExternalParameters utilizando el constructor HttpParameters y proporcione encabezados de respuesta entrante.
  4. Informar como una solicitud externa usando reportAsExternal(ExternalParameters params).

En este código de muestra, el agente está configurado para informar una llamada externa mediante CAT en el servidor que responde a la solicitud. Estos pasos se pueden resumir de la siguiente manera:

  1. Implemente Response y amplíe la clase ExtendedRequest utilizando clases framework en el servidor.

  2. Utilice setWebRequest(ExtendedRequest request) y setWebResponse(Response response) para convertir la transacción en una transacción web y juntos proporcionen al agente los encabezados de solicitud entrantes y un lugar para registrar los encabezados salientes.

    Es importante utilizar setWebRequest(ExtendedRequest request) y setWebResponse(Response response) juntos, porque el nombre de la transacción depende del objeto de solicitud y el código de respuesta depende del objeto de respuesta.

  3. Utilice addOutboundResponseHeaders() para que el agente agregue encabezados adecuados a la respuesta saliente.

  4. Marque el final de la respuesta con una llamada a markResponseSent().

API de mensajería

La API de mensajería permite a la aplicación informar la interacción con los corredores de cola de mensajes. Se basa en la API externa proporcionando MessageConsumerParametersMessage y MessageConsumerParameters.

Esta API genera la métrica necesaria para identificar la interacción del intermediario de mensajes. La UI utilizará estas métricas para mostrar datos de mensajería, incluidos segmentos en transacción con la acción y el recuento adecuados (entrada o recepción de mensaje), una pestaña de mensajes dedicada en la traza de la transacción y más. Proporcionar encabezados entrantes y salientes a la API también permite al agente agregar encabezados CAT y registrar métrica CAT, lo que permite a la UI dibujar mapas de servicios que muestran conexiones entre aplicaciones.

Importante

La API de mensajería se basa en la comunicación bidireccional entre productores y consumidores. Si su productor no recibe un reconocimiento de un consumidor, como en un patrón de disparar y olvidar, la API de mensajería no reflejará con precisión la interacción con los agentes de la cola de mensajes.

El siguiente ejemplo demuestra cómo instrumentar una biblioteca JMS ficticia.

Para simplificar las cosas, el agente supone que sendMessageToQueue siempre coloca un mensaje en una cola con nombre. En realidad, un mensaje se puede enviar a diferentes tipos de destino, incluidas colas con nombre, colas temporales, temas y temas temporales. La API proporciona una enumeración para informar mensajes a diferentes tipos de destino: NAMED_QUEUE, TEMP_QUEUE, NAMED_TOPIC, TEMP_TOPIC. Es importante especificar el tipo de destino apropiado porque la UI mostrará los nombres de las colas y los temas con nombre y omitirá los nombres de las colas y los temas temporales.

Si la biblioteca es capaz de transmitir encabezados CAT, se proporcionará un objeto OutboundHeaders a la API para que el agente pueda agregar encabezados CAT.

API de almacenamiento de datos

Cuando un método de traza se informa como una llamada de almacenamiento de datos externo, la llamada se muestra en la página base de datos de APM. Debido a que los almacenes de datos son externos a la aplicación en ejecución, el método se informa como actividad de almacenamiento de datos mediante el método reportAsExternal(ExternalParameters params) . La única diferencia es que se utiliza un constructor diferente, DatastoreParameters, para crear el objeto ExternalParameters apropiado.

API de almacenamiento de datos: consulta lenta

Esta API de llamada proporciona el mismo comportamiento que la API de almacenamiento de datos de llamada y lo amplía para permitir el seguimiento de la información de consulta lenta . Se utilizan el mismo método y constructor reportAsExternal(ExternalParameters params) , pero con un método de constructor adicional.

API de marcos web

La API de WebFrameworks permite al agente proporcionar información de identificación adicional sobre la aplicación.

// 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)

Sugerencia

Estos valores se pueden establecer sólo una vez. Las convocatorias posteriores no tendrán efecto.

Copyright © 2024 New Relic Inc.

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