Resumir un log de accesos: códigos de estado y pedidos lentos
Quince líneas que leen un log sin cargarlo entero en memoria y dicen cuántos errores hubo y cuáles fueron los pedidos más lentos.
El problema
El sitio anduvo lento anoche y hay un log de doscientos megas. Antes de montar una herramienta, hace falta una respuesta rápida: cuántos errores y qué rutas tardaron.
conteo = Hash.new(0)
lentas = []
File.foreach(ARGV[0] || "access.log") do |linea|
# formato: 2026-03-01T10:30:00 GET /pedidos 200 0.182
_fecha, metodo, ruta, estado, segundos = linea.split
next unless estado
conteo[estado] += 1
lentas << [segundos.to_f, metodo, ruta] if segundos.to_f > 1.0
end
conteo.sort.each { |estado, n| puts "#{estado}: #{n}" }
puts "\nLas 5 más lentas:"
lentas.max(5).each { |s, m, r| puts format(" %.2fs %s %s", s, m, r) }
Por qué está escrito así
- File.foreach lee línea por línea: el archivo nunca está entero en memoria, pese doscientos megas o veinte gigas.
- Hash.new(0) arranca cada contador en cero, así que conteo[estado] += 1 funciona sin preguntar si la clave existe.
- La asignación múltiple reparte las columnas de la línea en variables con nombre.
- max(5) sobre arreglos compara por el primer elemento: los segundos.
Guardalo como resumen.rb y corré: ruby resumen.rb access.log. Si tu log tiene otro formato, ajustá el orden de las variables.
split por espacios se rompe si la ruta o el agente de usuario traen espacios. Para logs de Apache o Nginx reales conviene una expresión regular con el formato exacto.
Adaptalo a tu caso con IA
El botón copia este prompt con el código pegado debajo. Reemplazá los corchetes con lo tuyo y pegalo en ChatGPT, Claude, Gemini o Copilot.
Tengo este script de Ruby que resume un log de accesos. Mi log tiene este formato real: [TRES LÍNEAS DE EJEMPLO]. Adaptalo con una expresión regular para ese formato y agregá: pedidos por hora, las diez rutas con más errores 5xx y el percentil 95 del tiempo de respuesta. Que siga leyendo línea por línea sin cargar el archivo en memoria.
Ejemplo escrito y revisado a mano.
Comentarios
Todavía no hay comentarios. El primero puede ser el tuyo.
¿Lo adaptaste a algo tuyo?
Contame qué resolviste con esto, o qué le faltó.