Configuración de custom dashboards en Lescopr para equipos de Ruby on Rails: Métricas de ActiveRecord y Sidekiq

¿Qué es un custom dashboard? Un custom dashboard es una vista personalizada que agrupa métricas específicas de tu aplicación, permitiendo observar en tiempo real indicadores críticos como latencia de consultas SQL o tiempo de procesamiento de trabajos en cola.

1. Preparación del entorno

1.1 Instalación de la gema Lescopr

  1. Abre tu terminal y agrega la gema al Gemfile:
    gem "lescopr"
    
  2. Ejecuta bundle install para instalarla.
  3. Genera el archivo de configuración con:
    rails generate lescopr:install
    
  4. Reinicia el servidor Rails.

1.2 Configuración básica de Lescopr

  • API Key: Obtén tu clave API en el panel de Lescopr y colócala en config/lescopr.yml bajo api_key.
  • Entorno: Define environment: production para evitar enviar datos de desarrollo.
  • Endpoint: Usa el endpoint por defecto https://api.lescopr.com/collect.

Tip: Mantén la configuración fuera del control de versiones usando variables de entorno.

2. Definir métricas de ActiveRecord

2.1 Instrumentar consultas SQL

Lescopr incluye un middleware que captura automáticamente la duración de cada consulta. Añade lo siguiente a config/application.rb:

config.middleware.use Lescopr::Middleware::ActiveRecord

Esto enviará a Lescopr métricas como db.query.time y db.query.count.

2.2 Crear métricas personalizadas

Para métricas específicas, usa el cliente Ruby:

Lescopr.metric("activerecord.slow_queries").record(duration_ms) if duration_ms > 200

Con este código, solo se registran consultas que superen los 200 ms, reduciendo el ruido.

3. Monitorizar trabajos de Sidekiq

3.1 Añadir middleware de tracing

En config/initializers/sidekiq.rb registra el middleware:

Sidekiq.configure_server do |config|
  config.server_middleware do |chain|
    chain.add Lescopr::Middleware::Sidekiq
  end
end

Este middleware envía métricas como sidekiq.job.latency y sidekiq.job.error_rate.

3.2 Exponer latencia y tasa de errores

Puedes crear un contador de errores personalizados:

begin
  # procesamiento del job
rescue => e
  Lescopr.metric("sidekiq.job.errors").increment
  raise e
end

De esta forma, cada excepción incrementa la métrica y aparece en el dashboard.

4. Construir el custom dashboard

4.1 Seleccionar widgets

En el portal de Lescopr, crea un nuevo dashboard y añade los siguientes widgets:

  • Gráfico de líneas: db.query.time (promedio por minuto).
  • Barra de estado: activerecord.slow_queries (conteo total).
  • Gauge: sidekiq.job.latency (latencia media).
  • Tabla: sidekiq.job.errors (últimos 20 errores).

4.2 Configurar filtros y alertas

  1. Añade un filtro por environment = production.
  2. Configura una alerta cuando db.query.time supere los 300 ms por 5 minutos consecutivos.
  3. Configura otra alerta cuando sidekiq.job.error_rate exceda el 5 %.

Nota: Las alertas pueden enviarse por Slack o email usando los canales de notificación de Lescopr.

5. Validar y ajustar

5.1 Analizar resultados iniciales

Una vez desplegado, observa los paneles durante al menos 24 horas. Busca patrones como picos de latencia coincidentes con aumentos de carga.

5.2 Optimizar consultas y reintentos

  • ActiveRecord: Refactoriza consultas N+1 usando includes o preload.
  • Sidekiq: Ajusta la concurrencia y el número de retries en sidekiq.yml.
  • Dashboard: Añade filtros de tiempo para comparar periodos de alta y baja carga.

6. Próximos pasos

Para profundizar, la documentación de Lescopr detalla la implementación paso a paso. Además, puedes explorar la guía de integración de Ruby on Rails para descubrir funcionalidades avanzadas como tracing distribuido y exportación de logs.


CTA: Si buscas una visión clara y medible de la salud de tu stack Rails, prueba Lescopr hoy mismo y comienza a construir dashboards que realmente sirvan a tu equipo.