• /
  • EnglishEspañolFrançais日本語한국어Português
  • Se connecterDémarrer

Cette traduction automatique est fournie pour votre commodité.

En cas d'incohérence entre la version anglaise et la version traduite, la version anglaise prévaudra. Veuillez visiter cette page pour plus d'informations.

Créer un problème

agent Java API: appels externes d'instrument, messagerie, datastore, infrastructure Web

L'agent Java de New Relic collecte et rapporte des informations sur les transactions Web et non Web, telles que les tâches en arrière-plan. L'agent doit instrumenter automatiquement le framework pris en charge, sans qu'il soit nécessaire de modifier le code de votre application . Cependant, en plus du code personnalisé et du framework ou de la technologie non répertoriés dans la documentation Compatibilité et exigences de l'agent Java, certaines implémentations du framework pris en charge peuvent nécessiter instrumentation personnalisée.

Ce document décrit comment utiliser l'API de l'agent Java pour instrumenter les appels externes, l'infrastructure de messagerie, le traçage distribué, les magasins de données et l'infrastructure Web. Pour de meilleurs résultats lors de l'utilisation de l'API, assurez-vous que vous disposez de la dernière version agent Java . Plusieurs API utilisées dans les exemples nécessitent l’agent Java 3.36.0 ou supérieur.

API externe

Le External API permet à l'application de signaler les appels de service externes à New Relic. Ces informations apparaissent sur la pageExternal services dans APM. Pour signaler une activité externe HTTP, créez simplement une instance de ExternalParameters à l'aide du générateur HttpParameters et appelez reportAsExternal(ExternalParameters parameters) sur la méthode de trace que vous souhaitez signaler.

Générateurs de paramètres externes

Il existe plusieurs constructeurs pour créer ExternalParameters:

  • DatastoreParameters
  • HttpParameters
  • GenericParameters
  • MessageConsumeParameters
  • MessageProduceParameters

Ces constructeurs créent l'objet de paramètre d'entrée pour TracedMethod reportAsExternal l'appel d'API. Ces objets de paramètres sont utilisés pour des choses comme la liaison des appels externes HTTP via le traçage distribué, le traçage des appels externes vers un datastore, le traçage des appels externes vers un datastore avec un traitement de requête lente supplémentaire, ainsi que le traçage des appels entre les producteurs de messages et le consommateur.

Important

Toutes les méthodes de cette classe ont le potentiel d’exposer des informations privées sensibles. Soyez prudent lors de la création des arguments, en accordant une attention particulière aux URI et aux valeurs de chaîne.

API de traçage distribué

L'API de traçage distribué permet à l'agent Java de New Relic de lier les transactions entre les applications qui sont instrumentées soit par l'agent Java de New Relic, soit par un autre instrumentation outil standard ouvert. Il utilise un wrapper pour permettre à l'agent de lire/écrire des en-têtes dans requests.

Enveloppe d'en-têtes

L'agent utilise l'interface Headers pour lire/écrire les en-têtes d'une requête. Le client et le serveur doivent tous deux implémenter cette interface en utilisant les classes de leur framework de communication. Par exemple:

Implémentation du traçage distribué à l'aide de wrappers

À l’aide de l’objet wrapper décrit dans la section précédente, vous pouvez permettre à l’ agent Java de signaler les traces côté client et côté serveur. Par exemple:

Dans cet exemple de code, l'agent est configuré pour signaler un appel externe à l'aide du traçage distribué sur le client qui lance la demande. Ces étapes peuvent être résumées comme suit :

  1. Implémentez Headers à l’aide des classes framework sur le client.
  2. Utilisez insertDistributedTraceHeaders(Headers headers) pour que l’agent ajoute les en-têtes appropriés à la demande sortante.

Dans cet exemple de code, l'agent est configuré pour lire les en-têtes de la demande. Ces étapes peuvent être résumées comme suit :

  1. Implémentez Headers à l’aide des classes framework sur le serveur.
  2. Utilisez acceptDistributedTraceHeaders(TransportType transportType, Headers headers) pour lier cette transaction à la transaction qui a effectué l’appel.

API de traçage inter-applications

Important

Le traçage inter-applications est obsolète à partir de la version 7.4.0 de l'agent et sera supprimé dans une future version de l'agent.

Au lieu d'utiliser le traçage inter-application, nous recommandons notre fonctionnalité de traçage distribué . tracing distribué est une amélioration de la fonctionnalité de tracing inter-applicationet est recommandé pour les grands systèmes distribués.

L'de traçage inter- (CAT)applicationAPI permet à l'agent Java de New Relic de lier les transactions à travers le moniteur d'applications par New Relic. L'API utilise des wrappers client et serveur qui permettent à l'agent de lire les en-têtes des requests et d'ajouter des en-têtes aux réponses.

Enveloppes client

Pour que l'agent écrive les en-têtes de requête sortante dans le client qui lance la requête, utilisez l'interface OutboundHeaders . Par exemple:

Pour que l'agent lise les en-têtes de réponse entrants dans le client recevant la réponse, implémentez InboundHeaders. Par exemple:

Enveloppeurs de serveur

Pour que l'agent obtienne les en-têtes de requête Web, vous devez étendre la classe ExtendedRequest :

Pour que l'agent définisse les en-têtes de réponse Web, implémentez l'interface Response :

Implémentation CAT à l'aide de wrappers

À l’aide des objets wrapper décrits dans les sections précédentes, vous pouvez permettre à l’agent Java d’effectuer un traçage inter-applications (CAT) côté client et côté serveur. Par exemple:

Dans cet exemple de code, l'agent est configuré pour signaler un appel externe à l'aide de CAT sur le client qui lance la demande. Ces étapes peuvent être résumées comme suit :

  1. Implémentez OutboundHeaders et InboundHeaders à l’aide des classes framework sur le client.
  2. Utilisez addOutboundRequestHeaders(OutboundHeaders outboundHeaders) pour que l’agent ajoute les en-têtes appropriés à la demande sortante.
  3. Créez l'objet ExternalParameters à l'aide du générateur HttpParameters et fournissez des en-têtes de réponse entrants.
  4. Signaler comme une demande externe en utilisant reportAsExternal(ExternalParameters params).

Dans cet exemple de code, l'agent est configuré pour signaler un appel externe à l'aide de CAT sur le serveur qui répond à la demande. Ces étapes peuvent être résumées comme suit :

  1. Implémentez Response et étendez la classe ExtendedRequest à l’aide de classes framework sur le serveur.

  2. Utilisez setWebRequest(ExtendedRequest request) et setWebResponse(Response response) pour convertir la transaction en un réseau de transactions et fournir ensemble à l'agent les en-têtes de demande entrants et un emplacement pour enregistrer les en-têtes sortants.

    Il est important d'utiliser setWebRequest(ExtendedRequest request) et setWebResponse(Response response) ensemble, car le nom de la transaction dépend de l'objet de demande et le code de réponse dépend de l'objet de réponse.

  3. Utilisez addOutboundResponseHeaders() pour que l’agent ajoute les en-têtes appropriés à la réponse sortante.

  4. Marquez la fin de la réponse avec un appel à markResponseSent().

API de messagerie

L'API de messagerie permet aux applications de signaler l'interaction avec les courtiers du fichier d'attente des messages. Il s'appuie sur l'API externe en fournissant les MessageConsumerParametersMessage et MessageConsumerParameters.

Cette API génère les métriques nécessaires pour identifier l'interaction du courtier de messages. L'UI utilisera ces métriques pour afficher les données de messagerie, y compris les segments dans les transactions avec l'action et le nombre appropriés (message placé ou message pris), un onglet de messages dédié dans la trace de transaction, et plus encore. La fourniture d'en-têtes entrants et sortants à l'API permet également à l'agent d'ajouter des en-têtes CAT et d'enregistrer les métriques CAT, ce qui permet à l'UI de dessiner des cartes de service qui montrent les connexions entre les applications.

Important

L'API de messagerie repose sur une communication bidirectionnelle entre les producteurs et les consommateurs. Si votre producteur ne reçoit pas d'accusé de réception d'un consommateur, comme dans un modèle de type « fire-and-forget », l'API de messagerie ne reflétera pas avec précision l'interaction avec les courtiers du fichier d'attente des messages.

L'exemple suivant montre comment instrumenter une bibliothèque JMS fictive.

Pour simplifier les choses, l’agent suppose que sendMessageToQueue place toujours un message dans une file d’attente nommée. En réalité, un message peut être envoyé à différents types de destinations, notamment des files d'attente nommées, des files d'attente temporaires, des sujets et des sujets temporaires. L'API fournit une énumération pour signaler des messages à différents types de destination : NAMED_QUEUE, TEMP_QUEUE, NAMED_TOPIC, TEMP_TOPIC. Il est important de spécifier le type de destination approprié car l'UI affichera les noms des files d'attente nommées et des rubriques nommées et omettra les noms des files d'attente temporaires et des rubriques temporaires.

Si la bibliothèque est capable de transmettre des en-têtes CAT, un objet OutboundHeaders sera fourni à l'API afin que l'agent puisse ajouter des en-têtes CAT.

API de la banque de données

Lorsqu'une méthode de trace est signalée comme un appel externe, l'appel est affiché datastore dans la APM page de base de données . Étant donné que les magasins de données sont externes à l’ application en cours d’exécution, la méthode est signalée comme activité datastore à l’aide de la méthode reportAsExternal(ExternalParameters params). La seule différence est qu'un constructeur différent, DatastoreParameters, est utilisé pour créer l'objet ExternalParameters approprié.

API de banque de données : requête lente

Cet appel d'API fournit le même comportement que l'appel d'API du datastore et l'étend pour permettre le suivi des informations des requêtes lentes . La même méthode reportAsExternal(ExternalParameters params) et le même générateur sont utilisés, mais avec une méthode de générateur supplémentaire.

API WebFrameworks

L'API WebFrameworks permet à l'agent de signaler des informations d'identification supplémentaires sur l'application.

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

Conseil

Ces valeurs ne peuvent être définies qu'une seule fois. Les appels ultérieurs n'auront aucun effet.

Droits d'auteur © 2025 New Relic Inc.

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