New Relic recopila y reporta información sobre transacciones browser web y transacciones no web (tareas en segundo plano). Normalmente, el agente .NET produce información completa automáticamente, sin necesidad de modificar el código de su aplicación. Sin embargo, si New Relic no es compatible con su framework, es posible que deba agregar instrumentación personalizada.
New Relic utiliza el método rastreador para implementar instrumentación personalizada. Un rastreador de métodos es una sonda de software que se puede aplicar a un método de cualquier clase. El agente .NET carga las directivas de instrumentación que definen qué métodos deben trazarse desde todos los archivos XML en el directorio de extensiones.
Este documento describe el trabajo instrumentado cuando el agente ya está cobrando la transacción, pero desea agregar más detalles a esas transacciones. Para que el instrumento funcione cuando el agente no está creando transacciones automáticamente, consulte Crear transacción vía XML. También puedes agregar detalles y crear transacciones decorando tu código con atributo.
Agregue detalles con instrumentación personalizada
Los archivos de extensión definen una serie de fábricas de rastreadores en un elemento de instrumentación. Cada fábrica de rastreador contiene elementos coincidentes que definen el ensamblado, el nombre de clase completo y el nombre del método a coincidir. Para definir un nuevo archivo XML de instrumentación personalizada:
Cree un nuevo archivo
.xml
en el directorio de extensiones utilizado por el agente .NET para leer cada archivo XML y definir su conjunto de instrumentación. Para el agente de .NET framework , utilice la siguiente ubicación:C:\ProgramData\New Relic\.NET Agent\ExtensionsImportante
No pongas el .xml archivo en el directorio
C:\Program Files\New Relic\.NET agent\Extensions
. El archivo debe estar en la ubicación del archivoProgramData
para que funcione la instrumentación personalizada.No modifique los archivos xml distribuidos. Estos archivos se sobrescriben cada vez que se actualiza el agente.
Copie esta plantilla en el archivo que creó y utilice la muestra como ejemplo. Esto instrumentó dos métodos pero puede agregar métodos a su archivo de instrumentación.
Sugerencia
Los valores
AssemblyName
,NameSpace.ClassName
yMethodName
distinguen entre mayúsculas y minúsculas.<?xml version="1.0" encoding="utf-8"?><extension xmlns="urn:newrelic-extension"><instrumentation><!-- These methods appear in the transactions breakdown table and in transaction traces --><tracerFactory metricName="Category/Name"><match assemblyName="AssemblyName" className="NameSpace.ClassName"><exactMethodMatcher methodName="MethodName" /></match></tracerFactory><tracerFactory metricName="Category/Name2"><match assemblyName="AssemblyName" className="NameSpace.ClassName2"><exactMethodMatcher methodName="MethodName2" /></match></tracerFactory></instrumentation></extension>Valide el archivo de instrumentación
.xml
conextension.xsd
.Aplicaciones que no son IIS (como una aplicación de consola o un proceso en segundo plano): también debe crear transacciones a través de XML para contener los métodos que utiliza. Los métodos personalizados instrumentados fuera de una transacción no serán informados a New Relic.
Importante
Si la versión de su agente .NET es 7.0 o superior, este es el final del procedimiento.
Si la versión de su agente .NET es inferior a 7.0, continúe con los siguientes pasos.
Si su aplicación está alojada en IIS, reinicie IIS.
Para aplicaciones que no sean IIS, reinicie el proceso de host de su aplicación o la aplicación misma.
Importante
Si algunos de sus métodos aún no aparecen en traza después de agregar instrumentación personalizada XML, deshabilite la inserción de métodos para esos métodos con [MethodImpl(MethodImplOptions.NoInlining)]
.
Ignorar una transacción
Puede evitar que una transacción sea reportada utilizando un archivo de instrumentación personalizada. Siempre que se llama a un método ignorado, el agente .NET ignora toda la transacción principal. Esto es lo mismo que llamar a IgnoreTransaction()
.
Para ignorar una transacción:
Añade un
tracerFactory
cuyo nombre esNewRelic.Agent.Core.Tracer.Factories.IgnoreTransactionTracerFactory
:<tracerFactory name="NewRelic.Agent.Core.Tracer.Factories.IgnoreTransactionTracerFactory"><match assemblyName="System.Web.Extensions" className="System.Web.Handlers.ScriptResourceHandler"><exactMethodMatcher methodName="Throw404" /></match></tracerFactory>
Seguimiento del trabajo asincrónico en una transacción separada
En algunos casos, se puede realizar un seguimiento del trabajo asincrónico como una transacción independiente aplicando la instrumentación AsyncForceNewTransactionWrapper
:
<tracerFactory name="AsyncForceNewTransactionWrapper"> <match assemblyName="AssemblyName" className="Namespace.ClassName"> <exactMethodMatcher methodName="MethodName" /> </match></tracerFactory>
Consideraciones de uso asíncrono | Comentarios |
---|---|
Método instrumentado | El método instrumentado debe invocarse mediante |
Tipo de devolución | No es necesario que el método instrumentado sea |
Instrumentación de atributos | Al método instrumentado no se le puede aplicar instrumentación de atributos. No se puede decorar con el atributo |
Ejemplo MiInstrumentación.xml
Este ejemplo instrumentó dos métodos e ignora otro método:
Instrument
:
CustomInstrumentDemo.Controllers.FirstController.FirstExample()
Instrument
:
CustomInstrumentDemo.Controllers.SecondController.SecondExample()
Ignore
:
CustomInstrumentDemo.Controllers.SecondController.ThirdExample()
Instrument
:
CustomInstrumentDemo.Controllers.SecondController.FourthExample(int id, string name)
Para implementar este esquema de instrumentación personalizada, utilice el siguiente archivo de ejemplo y métodos instrumentados:
Nombre métrica
La métrica creada desde rastreador se nombrará utilizando el nombre de clase y el nombre del método coincidente. Puede anular este nombre con el atributo metricName
. Comience metricName
con Custom/
(por ejemplo, metricName="Custom/OrderSubmissions"
).
<!-- instruments MyCompany.Order.Submit() and creates a metric named Custom/OrderSubmissions --><tracerFactory metricName="Custom/OrderSubmissions"> <match assemblyName="MyCompany" className="MyCompany.Order"> <exactMethodMatcher methodName="Submit" /> </match></tracerFactory>
Nombre transacción
El agente nombra las transacciones utilizando el rastreador en la transacción con la mayor prioridad de denominación.
- La transacción web puede denominarse utilizando el controlador HTTP, el nombre de ASP, el nombre del controlador MVC o el nombre del servicio web, dependiendo del rastreador invocado en la ejecución de la transacción.
- Las transacciones en segundo plano sin ningún rastreador que nombre explícitamente la transacción se resumen en un único nombre de transacción.
Utilice el atributo transactionNamingPriority
para indicarle al agente que le dé prioridad al nombre de una transacción rastreadora. Los valores válidos son 1
a 7
, donde 7
tiene prioridad sobre 1
a 6
. Además, el atributo metricName
debe comenzar con Custom/
(por ejemplo, metricName="Custom/instance"
).
<!-- instructs the agent to create a metric for MyControllerBase.Execute and to name the transaction using this tracer's metric name --><tracerFactory metricName="Custom/instance" transactionNamingPriority="7"> <match assemblyName="MyCompany" className="MyCompany.MyControllerBase"> <exactMethodMatcher methodName="Execute" /> </match></tracerFactory>
Validación XSD
El archivo de instrumentación XML se puede comparar con el archivo XSD (ubicado en C:\ProgramData\New Relic\.NET Agent\Extensions\extension.xsd
) con cualquier validador XSD.
Resolución de problemas
El agente .NET escribirá un mensaje de registro en NewRelic.Profiler.####.log
(donde ####
es el PID del proceso instrumentado) a medida que reescribe los métodos. Esto ayuda a verificar que se esté leyendo la instrumentación personalizada y que se estén instrumentando los métodos adecuados.
Sugerencia
Evite utilizar el atributo name
del elemento tracerFactory
en instrumentación personalizada. Para obtener más información, revise el archivo de esquema extension.xsd
en el directorio del agente.