Recopilación de logs de Ruby on Rails
Para enviar tus logs a Datadog, loguea un archivo con Lograge
y supervisa este archivo con tu Datadog Agent. Cuando configures el registro con Ruby, ten en cuenta los atributos reservados.
Con Lograge, puedes transformar el formato estándar de log basado en texto, como en este ejemplo:
Started GET "/" for 127.0.0.1 at 2012-03-10 14:28:14 +0100
Processing by HomeController#index as HTML
Rendered text template within layouts/application (0.0ms)
Rendered layouts/_assets.html.erb (2.0ms)
Rendered layouts/_top.html.erb (2.6ms)
Rendered layouts/_about.html.erb (0.3ms)
Rendered layouts/_google_analytics.html.erb (0.4ms)
Completed 200 OK in 79ms (Views: 78.8ms | ActiveRecord: 0.0ms)
Al siguiente formato JSON del log, que proporciona más estructura:
{
"timestamp": "2016-01-12T19:15:19.118829+01:00",
"level": "INFO",
"logger": "Rails",
"method": "GET",
"path": "/jobs/833552.json",
"format": "json",
"controller": "jobs",
"action": "show",
"status": 200,
"duration": 58.33,
"view": 40.43,
"db": 15.26
}
Instala y configura tu registrador
- Añade el gem
lograge
a tu proyecto: - En tu archivo de configuración, establece lo siguiente para configurar Lograge:
# Lograge config
config.lograge.enabled = true
# This specifies to log in JSON format
config.lograge.formatter = Lograge::Formatters::Json.new
## Disables log coloration
config.colorize_logging = false
# Log to a dedicated file
config.lograge.logger = ActiveSupport::Logger.new(Rails.root.join('log', "#{Rails.env}.log"))
# This is useful if you want to log query parameters
config.lograge.custom_options = lambda do |event|
{ :ddsource => 'ruby',
:params => event.payload[:params].reject { |k| %w(controller action).include? k }
}
end
Nota: Lograge también puede añadir información contextual a tus logs. Consulta la documentación de Lograge para obtener más detalles.
Para ver un ejemplo más detallado de esta configuración, consulta Cómo recopilar, personalizar y gestionar logs de aplicación de Rails.
RocketPants
Para configurar Lograge para controladores rocket_pants
, en el archivo config/initializers/lograge_rocketpants.rb
(la localización puede variar dependiendo de tu proyecto):
# Come from here:
# https://github.com/Sutto/rocket_pants/issues/111
app = Rails.application
if app.config.lograge.enabled
ActiveSupport::LogSubscriber.log_subscribers.each do |subscriber|
case subscriber
when ActionController::LogSubscriber
Lograge.unsubscribe(:rocket_pants, subscriber)
end
end
Lograge::RequestLogSubscriber.attach_to :rocket_pants
end
Añade el gem grape_logging
a tu proyecto:
Añade la configuración adicional a Grape:
use GrapeLogging::Middleware::RequestLogger,
instrumentation_key: 'grape',
include: [ GrapeLogging::Loggers::Response.new,
GrapeLogging::Loggers::FilterParameters.new ]
Crea el archivo config/initializers/instrumentation.rb
y añade la siguiente configuración:
# Subscribe to grape request and log with a logger dedicated to Grape
grape_logger = Logging.logger['Grape']
ActiveSupport::Notifications.subscribe('grape') do |name, starts, ends, notification_id, payload|
grape_logger.info payload
end
Configurar el Datadog Agent
Cuando tengas la recopilación de logs activada, configura la recopilación de logs personalizada para supervisar tus archivos de log y enviarlos a Datadog.
- Crea una carpeta
ruby.d/
en el directorio de configuración del Agent conf.d/
. - Crea un archivo
conf.yaml
en ruby.d/
con el siguiente contenido: logs:
- type: file
path: "<RUBY_LOG_FILE_PATH>.log"
service: <SERVICE_NAME>
source: ruby
sourcecategory: sourcecode
## Uncomment the following processing rule for multiline logs if they
## start by the date with the format yyyy-mm-dd
#log_processing_rules:
# - type: multi_line
# name: new_log_start_with_date
# pattern: \d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])
- Reinicia el Agent.
- Ejecuta el subcomando de estado del Agent y busca
ruby
en la sección Checks
para confirmar que los logs se han enviado correctamente a Datadog.
Si los logs están en formato JSON, Datadog parsea los mensajes del log de forma automática para extraer sus atributos. Utiliza el Log Explorer para ver tus logs y solucionar problemas relacionados.
Conectar logs y trazas
Si APM está habilitado para esta aplicación, puedes mejorar la conexión entre los logs de aplicación y las trazas (traces) siguiendo la documentación de registro de APM Ruby para añadir automáticamente trazas e IDs de tramos en tus logs.
Prácticas recomendadas
Añade contexto adicional (usuario, sesión, acción y métricas) a tus logs cuando sea posible.
En lugar de registrar mensajes de cadena simples, puedes utilizar hashes de log como se muestra en el siguiente ejemplo:
my_hash = {'user' => '1234', 'button_name'=>'save','message' => 'User 1234 clicked on button saved'};
logger.info(my_hash);
El hash se convierte en JSON y se pueden realizar análisis para user
y button_name
:
{
"timestamp": "2016-01-12T19:15:18.683575+01:00",
"level": "INFO",
"logger": "WelcomeController",
"message": {
"user": "1234",
"button_name": "save",
"message": "User 1234 clicked on button saved"
}
}
Leer más
Additional helpful documentation, links, and articles: