Pour votre application Java monitorée par New Relic, une méthode d'instrumentation personnalisée consiste à utiliser un fichier XML qui répertorie les méthodes et les classes que vous souhaitez . Cette documentation montre un exemple de fichier d'instrumentation XML. Pour plus d'informations, voir Instrumentation Java par XML.
Modifier le fichier XML dans UI
Pour modifier votre fichier XML directement depuis lâUI de New Relic : accĂ©dez one.newrelic.com > All capabilities > APM & services > (select an app) > Settings > Instrumentation Ă . Ă partir d'ici vous pouvez :
- Téléchargez un exemple de fichier XML.
- Sélectionnez un fichier XML existant ou modifiez-le.
- Rechercher l'historique de l'instrumentation.
Format de fichier XML
Le format de fichier XML inclut les nĆuds racine et enfants.
Prudence
N'instrumenter pas toutes vos méthodes, car cela peut entraßner un problÚme de regroupement métrique.
Le nĆud racine dâun fichier XML est extension
. Il peut avoir trois attributs différents :
Valeur | Définition |
---|---|
| Un nom unique mais descriptif identifiant votre extension XML. |
| Identifie si l'extension sera lue par l'agent Java. La valeur par défaut est |
| La version de l'extension. Si deux extensions ont le mĂȘme nom, seule l'extension avec la version la plus Ă©levĂ©e sera utilisĂ©e. |
Le nĆud instrumentation
est un enfant de extension
. Il peut avoir un attribut : metricPrefix
. Il s'agit du prĂ©fixe utilisĂ© pour les noms mĂ©triques lorsque le nĆud nameTransaction
n'est pas spécifié. La valeur par défaut est CUSTOM
.
Le pointcut
est un nĆud enfant de instrumentation
et peut avoir plusieurs attributs. De plus, un pointcut
peut avoir plusieurs nĆuds enfants diffĂ©rents.
Valeur | Définition |
---|---|
| Si une transaction n'est pas déjà en cours lorsque ce point de coupure est atteint, alors une transaction sera démarrée. Si une transaction est déjà en cours, cette transaction continuera. Une nouvelle transaction ne sera pas créée. |
| Le format de nom à utiliser pour une métrique. S'il n'est pas présent, la valeur par défaut sera le nom de la classe suivi du nom de la méthode. Vous ne pouvez définir le |
| Lorsque |
| Lorsque |
| Définit le type de transaction. Les valeurs possibles sont |
Un pointcut
peut avoir plusieurs nĆuds enfants diffĂ©rents :
Valeur | Définition |
---|---|
| Si cet élément est présent, l'agent nommera la transaction en utilisant le nom de la classe et la ou les méthodes instrumentées par ce pointcut. |
| Le nom complet sensible à la casse d'une classe d'annotation, y compris le nom du package. Toutes les méthodes marquées avec cette annotation seront mises en correspondance. |
| Le nom sensible Ă la casse de la classe Ă faire correspondre, y compris le nom du package. Associez ce nĆud au nĆud de mĂ©thode. Si ce nĆud est prĂ©sent sur un point de coupe, alors le nĆud Le nĆud Le
|
| Le nom sensible Ă la casse d'une interface, y compris le nom du package, dont les classes d'implĂ©mentation seront mises en correspondance. Associez ce nĆud au nĆud de mĂ©thode. Si ce nĆud est prĂ©sent sur un point de coupe, alors le nĆud Le |
| Une mĂ©thode sur la classe pour instrument. Associez ce nĆud Ă un nĆud |
| Le nom de la classe, y compris le package, au format utilisé dans le bytecode, par exemple Toutes les méthodes qui renvoient un objet de cette classe seront mises en correspondance. |
| Un boolĂ©en indiquant s'il faut faire correspondre les lambdas. Le nĆud
|
Le nĆud method
peut avoir plusieurs enfants. Pour plus d'informations et d'exemples, voir dépannage Java instrumentation personnalisée.
Valeur | Définition |
---|---|
| Le nom exact, sensible Ă la casse, de la mĂ©thode Ă faire correspondre. Un nĆud de mĂ©thode
|
| Les types de paramĂštres de la mĂ©thode spĂ©cifiĂ©s dans l'ordre. Si l'Ă©lĂ©ment Un nĆud de mĂ©thode
|
| Le nom sensible à la casse d'une classe indiquant un type de retour à faire correspondre. Toutes les méthodes qui renvoient ce type de classe seront mises en correspondance. |
Exemple
Voici un exemple de classe et un fichier XML qui pourraient ĂȘtre utilisĂ©s pour instrumenter cette classe.
package test;
import java.util.HashMap;import java.util.Map;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;
public class SampleTester {
private String configName; private Map<String, Long> maxSampleTimes;
public SampleTester(String pConfigName) { configName = pConfigName; maxSampleTimes = new HashMap<>(); }
public void checkSample(String name, long[] times) { if (times != null) { maxSampleTimes.put(name, getFirst(times)); } else { maxSampleTimes.put(name, (long) getFirst()); } }
private Long getFirst(long[] times) { return times[0]; }
private int getFirst() { return 0; }
public void printMaxRepeat(final long max) throws Exception { Runnable myRunnable = new Runnable() { public void run() { try { printMax(max); } catch (Exception e) { e.printStackTrace(); } } };
ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(1); scheduledExecutor.scheduleWithFixedDelay(myRunnable, 0, 10000, TimeUnit.MILLISECONDS); }
private void printMax(long max) { System.out.println("max is " + max); }}
<?xml version="1.0" encoding="UTF-8"?><extension xmlns="https://newrelic.com/docs/java/xsd/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="newrelic-extension extension.xsd" name="customExtension" version="1.0">
<instrumentation metricPrefix="EXAMPLE"> <pointcut transactionStartPoint="true">
<!--class name is preceded by package name--> <className>test.SampleTester</className> <method> <name>checkSample</name> <parameters> <type attributeName="sampleName">java.lang.String</type> <type>long[]</type> </parameters> </method> <!--two methods with the same name but different signatures can share one node--> <method> <name>getFirst</name> </method> <method> <name>run</name> </method> </pointcut>
<pointcut transactionStartPoint="false" ignoreTransaction="false" excludeFromTransactionTrace="false" metricNameFormat="SampleTester/methods"> <className>test.SampleTester</className> <method> <name>printMaxRepeat</name> </method> <method> <name>printMax</name> </method> </pointcut>
</instrumentation></extension>
Le premier bloc du fichier XML spécifie le nom et la version de l'extension. Comme l'extension XML par défaut est enabled
, cet attribut n'est pas spécifié.
Le deuxiÚme bloc spécifie les méthodes dans SampleClass
qui doivent ĂȘtre instrumentĂ©es. Une transaction est dĂ©marrĂ©e au dĂ©but du bloc. Il convient de noter que dans la classe d'exemple, il existe deux mĂ©thodes qui partagent un nom (getFirst
) mais ont des signatures diffĂ©rentes. Ceux-ci sont instrumentĂ©s avec un seul nĆud de mĂ©thode. En supprimant le nĆud parameters
, toutes les mĂ©thodes portant le mĂȘme nom peuvent ĂȘtre associĂ©es sous un seul nĆud de mĂ©thode.
Dans le troisiĂšme bloc, les mĂ©thodes spĂ©cifiĂ©es nâont pas de transaction dĂ©marrĂ©e sur elles. C'est parce que la transaction a dĂ©jĂ Ă©tĂ© dĂ©marrĂ©e dans run
. La transaction ne sera pas ignorée et sera incluse dans la trace de transaction.