Cómo instrumentar tu app de Ruby con el agente Ruby de Elastic APM
Enviar métricas de desempeño desde tu app de Ruby al servidor de APM puede ser tan fácil como instalar el Rubygem elastic-apm
. La mayoría de las integraciones son plug-and-play, y el soporte de Rails y Rack está incorporado.
Sin embargo, existen diversas maneras de agregar más información a los datos, así como de configurar tus propias instrumentaciones personalizadas.
Agregar más información a las partes ya instrumentadas
Existen algunos conceptos para agregar más información a los datos que ya estás recopilando, Elastic APM.
Digamos que tu app está construida alrededor del concepto de compañías
. Podrías asignar current_company.short_name
a cada transacción y error. Las etiquetas son simples pares clave-valor y se indexan en Elasticsearch. De este modo, se pueden filtrar y permiten hacer búsquedas para que puedas dividir tus métricas como quieras:
class ApplicationController < ActionController::Base
before_action do
ElasticAPM.set_label :company, current_company.short_name
end
end
Esto hará que sea mucho más fácil ver si ciertos problemas de desempeño o excepciones solo afectan a algunos de tus clientes.
Los usuarios son otro concepto generalizado, y Elastic APM tiene un lugar para eso también:
class ApplicationController < ActionController::Base
before_action do
ElasticAPM.set_label :company_id, current_company.id
ElasticAPM.set_user current_user
end
end
El agente incluirá los campos ID
, correo electrónico
y nombre de usuario
de todo lo que pase. Por supuesto, puedes personalizar los campos con la forma con la que se denominen en tu app.
El módulo SpanHelpers
Si ya has identificado un método específico del que quieras rastrear la duración, puedes usar el módulo SpanHelpers
. Proporciona dos métodos, span_method
y span_class_method
.
class ThingsController < ApplicationController
include ElasticAPM::SpanHelpers
# ...
def do_the_work
# ...
end
span_method :do_the_work
def self.do_other_work
# ...
end
span_class_method :do_other_work
# ... alternative syntax for newer versions of Ruby
span_method \
def do_the_work
# ...
end
end
Consulta los documentos del agente Ruby de Elastic APM SpanHelpers
.
Este enfoque es ideal si lo que quieres medir es una llamada de método simple. Si quieres un control más granular, puedes usar la API de uso general.
Crear transacciones e intervalos de forma manual
Para crear transacciones e intervalos de forma manual, el agente proporciona una API pública. El mismo agente usa esta API de manera interna para instrumentar la mayoría de las bibliotecas compatibles.
Lo primero que necesitas es una transacción. Si estás dentro de una solicitud en tu app Rails, tu app Racks con middleware, o un trabajo de fondo en uno de tus ejecutores de trabajo compatibles, es probable que ya estés dentro de una transacción.
Si no lo estás, crea una transacción así:
ElasticAPM.start # if it isn't started already
begin
transaction = ElasticAPM.start_transaction 'Optional name', 'optional.type'
# Es tu responsabilidad asegurarte de que las transacciones se finalicen.
# Para asegurarnos de que lo hacemos, incluimos begin..ensure.
ensure
ElasticAPM.end_transaction
end
Si no, existe una versión de bloque de lo mismo que se asegura de finalizar después:
ElasticAPM.with_transaction do |transaction|
# Si lo necesitas, puedes alterar la transacción dentro, p. ej.:
transaction.name = method_that_returns_the_name
# Ten en cuenta que si el agente no se inicia, la `transacción` es nula pero el bloque aún se evalúa
end
Dentro de las transacciones, los intervalos son trabajos individuales que realiza tu app. Si estás usando cualquiera de las bibliotecas instrumentadas automáticamente, todo lo que tienes que hacer es incluirlas en una transacción.
Si necesitas intervalos adicionales, la API será igual a la transacción:
begin
span = ElasticAPM.start_span 'Required name', 'optional.type'
ensure
ElasticAPM.end_span
end
# O la forma en bloque
ElasticAPM.with_span 'Hard work' do |span|
# ...
end
Consulta los documentos del agente Ruby de APM para acceder a la API pública.
Fácil de comenzar, fácil de expandir
Nos hemos esforzado al máximo para que la configuración inicial mínima del agente de APM de Ruby sea lo más simple posible. Si no quieres usarlo, no necesitas todo lo anterior y es probable que obtengas mucha información que pueda usarse de todas maneras.
Sin embargo, si quieres ponerte manos a la obra diseccionando cada parte de la enormidad de tu app, Elastic APM te brinda las herramientas para que también lo hagas.
Pruébala
¿Qué tan bien funciona tu Ruby? ¿En qué está usando el tiempo? ¿Dónde deberías concentrar tu próximo esfuerzo para mejorar la experiencia del usuario? Elastic APM y el agente Ruby pueden ayudarte a responder todas estas preguntas y más. Instrumenta tu app y descarga el Elastic Stack o ejecútalo de manera local. Si no, envía tus rastreos a Elasticsearch Service en Elastic Cloud con una prueba gratuita, que incluye un servidor de APM. Como siempre, si tienes preguntas, ideas, dudas o preocupaciones, contáctanos en el foro de discusión.