El agente de Java de New Relic proporciona varias opciones para instrumentación personalizada. Una de esas opciones es agregar las anotaciones @Trace
, @TraceLambda
o @TraceByReturnType
del agente de Java API al código de su aplicación. Este documento describe cómo utilizar las anotaciones.
Importante
Para utilizar anotaciones, debe modificar el código fuente. Si no puede o no quiere modificar su código fuente, consulte instrumentación personalizada para conocer otras opciones de instrumentación.
Las anotaciones están habilitadas de forma predeterminada.
De forma predeterminada, la configuración enable_custom_tracing
está establecida en true
en el agente de Java, que es la configuración necesaria para que funcionen las anotaciones @Trace.
Esta configuración no está incluida en newrelic.yml
de forma predeterminada. Si desea desactivar las anotaciones, establezca enable_custom_tracing: false
(precedido por dos espacios) en la sección common
de su newrelic.yml
.
@Rastro
Anotar un método con @Trace
le dice al agente de Java que se deben tomar medidas para ese método.
Para agregar una llamada a un método como una traza personalizada, agregue @Trace
anotaciones a su método. Asegúrese de que newrelic-api.jar
aparezca en su classpath ya que contiene todas estas anotaciones.
import com.newrelic.api.agent.Trace;
...
@Trace public void run() { // background task }
Crear una nueva transacción
Si las transacciones no aparecen y desea iniciar una nueva transacción, incluya dispatcher=true
con la anotación @Trace
:
@Trace (dispatcher=true)public void run() { // background task}
Añade detalles a tu transacción
Si su traza de la transacción muestra grandes bloques de tiempo no instrumentados y desea incluir algunos métodos más dentro de la traza, puede usar la anotación @Trace
sin parámetro:
@Traceprotected void methodWithinTransaction() { // work}
Convertir una transacción en una solicitud web
Para generar un informe de tarea en segundo plano como una transacción browser web con una llamada API de agente de Java : En el método anotado con @Trace(dispatcher=true)
, llame a:
NewRelic.setRequestAndResponse(Request request, Response response)
Los argumentos son implementaciones de las interfaces Request
y Response
en newrelic-api.jar
.
Importante
Incluso si sus objetos Request
y Response
ya están presentes, aún necesita agregar esta llamada API.
Defina su propia clase de anotación @Trace
Si define su propia clase de anotación @Trace
, no hay dependencia de newrelic-api.jar
. Para definir la clase:
package com.test;
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)
public @interface Trace { public static final String NULL = ""; String metricName() default NULL; boolean dispatcher() default false; String tracerFactoryName() default NULL;}
Luego, configure el agente para usar esta anotación en la sección common
de newrelic.yml
:
class_transformer: trace_annotation_class_name: com.test.Trace
Propiedades para @Trace
La anotación @Trace
admite las siguientes propiedades.
@TraceLambda
Esta característica está deshabilitada de forma predeterminada y debe habilitarse explícitamente (p. ej. -Dnewrelic.config.instrumentation.trace_lambda.enabled=true
) para que las anotaciones surtan efecto. La variable de entorno equivalente es NEW_RELIC_INSTRUMENTATION_TRACE_LAMBDA_ENABLED
.
Si su traza de la transacción muestra grandes bloques de tiempo no instrumentados y desea incluir expresiones lambda dentro de la traza, puede usar la anotación @TraceLambda
sin parámetro:
import com.newrelic.api.agent.TraceLambda;
@TraceLambdaclass ClassContainingLambdaExpressions() { // work}
Las expresiones lambda se convierten en métodos estáticos de la clase que las contiene después de la compilación. De forma predeterminada, los métodos estáticos dentro de las clases marcadas con la anotación @TraceLambda
que coincidan con el patrón de anotaciones se marcarán con la anotación @Trace
.
Propiedades para @TraceLambda
La anotación @TraceLambda
admite las siguientes propiedades.
@TraceByReturnType
Para incluir métodos con un tipo de retorno particular dentro de la traza, puede usar la anotación @TraceByReturnType
para marcar una clase que pasa los tipos de retorno como una propiedad. Los métodos de las clases anotadas que coincidan con uno de los tipos de devolución especificados se marcarán con la anotación @Trace
.
@TraceByReturnType(traceReturnTypes={Integer.class, String.class})class ClassContainingMethods() { // ...}
Propiedades de @TraceByReturnType
La anotación @TraceByReturnType
admite las siguientes propiedades.
Consideraciones de rendimiento
Cuando el agente de Java está presente en la JVM, inyectará código en los métodos anotados. El impacto en el rendimiento es insignificante en operaciones pesadas, como base de datos o llamadas a servicios web, pero es notable en métodos que se llaman con frecuencia, como un descriptor de acceso llamado miles de veces por segundo.
Advertencia
No utilice instrumentos en todos sus métodos, ya que esto puede provocar una disminución del rendimiento y un problema de agrupación métrica.
Más funciones API
Para obtener más información sobre la API del agente de Java y su funcionalidad, consulte la introducción a la API del agente de Java.