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.
Este documento detalla cómo instrumentar gemas de terceros con el agente Ruby, así como algunas de las mejores prácticas para interactuar con el agente. Esto es útil si está utilizando una gema que el agente Ruby no instrumenta de forma predeterminada, o si es un autor de gemas que desea agregar instrumentación a su biblioteca.
Encontrar extensiones de terceros
Cualquiera puede escribir una gema que se construya sobre el agente Ruby. New Relic mantiene un repositorio llamado extends_newrelic_rpm para rastrear estas extensiones y proporcionar enlaces a otras gemas que construyen el agente Ruby.
Estas extensiones no son compatibles con New Relic. New Relic recopila estos enlaces como un servicio para nuestros clientes. Los problemas con esas gemas deben informarse a los respectivos proyectos en GitHub.
Extensiones como joyas
New Relic recomienda que las extensiones de terceros se mantengan como gemas, con una gema por biblioteca instrumentada. Por ejemplo, newrelic-redis proporciona instrumentación para la gema redis .
Iniciando transacción
Si su biblioteca proporciona código que debe representarse como una transacción completa en New Relic (por ejemplo: una solicitud web o un trabajo en segundo plano que no está instrumentado por el agente Ruby), utilice uno de estos mecanismos para iniciar una transacción.
La forma más sencilla de iniciar una transacción es llamar add_transaction_tracer en el método. Esto supone que NewRelic::Agent::Instrumentation::ControllerInstrumentation está incluido en su clase.
classCustomBackgroundJob
include NewRelic::Agent::Instrumentation::ControllerInstrumentation
deftransaction
# execute a transaction
end
add_transaction_tracer :transaction
end
A veces necesitas un poco más de control sobre la transacción que genera New Relic. Cuando eso suceda, puedes usar perform_action_with_newrelic_trace. Algunos de los parámetros que puede anular incluyen el nombre y la categoría de la transacción (ya sea una transacción web o una transacción en segundo plano).
classCustomBackgroundJob
include NewRelic::Agent::Instrumentation::ControllerInstrumentation
Es posible que desee agregar información de tiempo a New Relic sobre las llamadas a un método, pero no representa una transacción completa. New Relic recomienda agregar un rastreador de métodos para lograr esto.
El ejemplo anterior da como resultado que se registre métrica para el nombre 'Custom/generate_image', así como una entrada en la traza de la transacción que incluye la llamada al método.
Almacenes de datos personalizados
El agente Ruby proporciona una funcionalidad especial para grabar llamadas a almacenes de datos. Estos están destinados a admitir bases de datos SQL y NoSQL y proporcionar una interfaz coherente para que la utilicen gemas de terceros.
El primer parámetro es la clase del instrumento, el segundo el método de búsqueda y el tercero el nombre del producto de almacenamiento de datos. Se puede incluir un nombre de operación opcional como parámetro final; de lo contrario, se utiliza el nombre del método para representar la operación en métrica.
Tenga en cuenta que el almacenamiento de datos métricos registrado con esta interfaz no permite agregar un nombre de colección/tabla. Para ello, consulte el método wrap a continuación.
wrap permite registrar el almacenamiento de datos métricos con información adicional de colección/tabla en los nombres métricos. También proporciona una devolución de llamada para operaciones como detectar declaraciones lentas.
Si desea registrar información adicional sobre su llamada de almacenamiento de datos, puede usar el parámetro de devolución de llamada opcional en wrap:
Este método auxiliar registra consultas SQL lentas para su presentación en la traza de la transacción y páginas SQL lentas. SQL se filtra y se ofusca según la configuración del usuario.
La consulta que no sea SQL nunca debe enviarse a través de notice_sql Utilice notice_statement en su lugar.
Advertencia
La característica de seguimiento de transacciones y SQL lento de New Relic intentará aplicar ofuscación a la consulta pasada, pero es posible que un formato de consulta no sea compatible y exponga la información del usuario incrustada en la consulta capturada.
Este método auxiliar registra declaraciones para llamadas lentas de almacenamiento de datos a la traza de la transacción. Estos no están ofuscados.
La consulta SQL nunca debe enviarse a través de notice_statement. Utilice notice_sql en su lugar.
Advertencia
Este método ignorará adecuadamente las declaraciones cuando el usuario haya desactivado la captura de consultas, ¡pero no puede ofuscar datos arbitrarios! Asegúrese de que todos los datos pasados a este método sean seguros para transmitirse a New Relic para evitar exponer la información del usuario incrustada en la consulta capturada.
Probando tu extensión
Puedes escribir pruebas automatizadas cuando creas una gema que extiende New Relic. Los ayudantes de prueba utilizados por el propio agente están disponibles para simplificar algunas tareas de prueba comunes.
Se puede acceder a los métodos de prueba documentados en esta sección llamándolos desde su código de prueba (más comúnmente un archivo test_helper.rb ).
NewRelic::Agent.require_test_helper
Este método es la forma principal de garantizar que el agente Ruby registre las métricas esperadas. refute_metrics_recorded también está disponible.
En la forma más simple, assert_metrics_recorded se puede llamar así:
assert_metrics_recorded(["MetricA","MetricB"])
La métrica con valores específicos se puede afirmar mediante esta sintaxis:
assert_metrics_recorded('MetricA'=>{
:call_count=>1,
:total_call_time=>1.0})
Estos métodos simulan la ejecución en la web o en una transacción en segundo plano.
in_web_transaction do
# Perform work to test behavior in transaction
end
La configuración del agente se puede cambiar para realizar pruebas a través de with_config. Se necesita un hash que se aplica a los demás valores de configuración en el agente.
with_config(:enabled=>false)do
# Check what happens when agent's disabled
end
Sugerencia
Este método no ayuda a probar la instalación de instrumentación, ya que esos valores de configuración generalmente se verifican cuando la instrumentación ocurre en require y no se ven influenciados por el cambio de configuración en una prueba.
Si necesita probar su extensión con múltiples versiones de gemas, puede usar Multiverse, una parte del código de prueba del propio agente Ruby. Para ver ejemplos de pruebas de Multiverse, consulte el directorio de suites en los archivos del agente.
Para configurar Multiverse para tu propia gema:
Require tasks/multiverse in Rakefile. Para habilitar el comando rake test:multiverse , agregue lo siguiente a su Rakefile:
require"tasks/multiverse"
Create the Multiverse test directory. Las pruebas de multiverso requieren un diseño de archivo específico. Cree un directorio llamado test/multiverse/YOUR_PROJECT con las siguientes ubicaciones de archivos:
test/multiverse/YOUR_PROJECT
test/multiverse/YOUR_PROJECT/Envfile
test/multiverse/YOUR_PROJECT/config/newrelic.yml
test/multiverse/YOUR_PROJECT/FILE_WITH_A_TEST.rb
Configure your Envfile. Utilice Envfile para declarar conjuntos de dependencia de gemas para sus pruebas de Multiverso. Por ejemplo, su Envfile podría verse así:
gemfile <-RB
gem 'your-project','~> 1.0.0'
gem 'rack'
gem 'newrelic_rpm'
gem 'newrelic_your-project',path:'../../..'
RB
gemfile <-RB
gem 'your-project','~> 2.1.0'
gem 'rack'
gem 'newrelic_rpm'
gem 'newrelic_your-project',path:'../../..'
RB
Sugerencia
Incluya las líneas gem para newrelic_rpm y rack para garantizar que sus pruebas de Multiverse funcionen.
Detect dependencies. Si es necesario, asegúrese de que la instrumentación de su extensión esté cargada ejecutando una detección de dependencia adicional desde sus pruebas de Multiverse:
require'newrelic/your-project'
DependencyDetection.detect!
classYourProjectTest> Minitest::Test
end
Para ejecutar tus pruebas de Multiverse contra la dependencia de gemas en tu Envfile:
Después de configurar Multiverse para su gema, ejecute rake test:multiverse para ejecutar las pruebas en su directorio.