Ordenar los registros de Heroku cronológicamente

Heroku es una plataforma de alojamiento a cuyos registros se puede acceder a través de la heroku logslínea de comando:

$ heroku logs
2014-07-17T06:24:02.216403+00:00 app[web.1]: Started
2014-07-17T06:24:02.216410+00:00 app[web.1]: Stopped
2014-07-17T06:24:02.216408+00:00 app[web.1]: Paused

Como puedes notar arriba, no se respeta el orden cronológico .
Heroku está contento con eso y no da ningún consejo en particular.

¿Hay alguna herramienta o secuencia de comandos bash que pueda usar para ordenar los registros de Heroku?
Los registros son bastante pequeños, 1500 líneas como máximo.

Gratis, de código abierto, se ejecuta en Linux bash.

Respuestas (3)

Podrías intentar esto:

heroku logs > heroku.txt
sort -n -t\  -k1 heroku.txt

-nEstá ordenando los números en orden, bit -t\está usando un espacio como separador, -k1está usando la columna uno (la marca de tiempo).

Sin poner los registros en un archivo separado, supongo que podría usar:

heroku logs | sort -n -t\  -k1

De manera similar, para ordenar en orden inverso ( -nr):

heroku logs | sort -nr -t\  -k1
¡Eso funciona! De hecho, necesito un orden cronológico, así que, ¿podría cambiarlo a heroku logs | sort -n -t\ -k1? ¡Gracias!
No hay problema :) Cambié eso por ti.
heroku logs | sortfuncionaría igual de bien. El formato de fecha tiene la propiedad de que el orden lexicográfico coincide con el orden cronológico, gracias a que los campos son de ancho fijo y en orden de importancia decreciente.
Tienes toda la razón, ¡nunca lo había notado! Aprenda algo nuevo cada día..

Escribí un pequeño script para heroku logs -tordenar los registros en vivo ( ).

http://pastebin.com/8Lby3bMg

Puedes correr con:

heroku logs -t | python delayed_sort.py

Si quieres mantener el color:

script -q -c "heroku logs -t" -a /dev/null | python delayed_sort.py

El script simplemente contiene un búfer de las últimas 100 líneas de registro. Cuando el búfer se llena, la línea con la marca de tiempo más antigua aparece (usando heap-queue para mayor eficiencia...). El búfer también se vacía cuando no hay nuevas líneas de registro durante 1 segundo.

Todavía existe una pequeña posibilidad de que las líneas salgan sin clasificar: una línea con una marca de tiempo anterior a las 100 líneas anteriores, o una línea con una marca de tiempo anterior después de una pausa de comunicación de 1 segundo.

¡Excelente! ¿Tal vez la secuencia de comandos podría llamar a los registros de heroku por sí misma, de modo que solo tenga que invocar la secuencia de comandos, sin usar tuberías?
El script funcionaría para cualquier tubería de registros que contengan marcas de tiempo. Podría ser un buen complemento heroku-cli ( devcenter.heroku.com/articles/using-cli-plugins ), pero creo que tendría que convertir el código a Ruby o algo así. Simplemente creé un script bash en mi PATH llamado heroku-logs, con la script -q ...línea.
Este script no funciona en Mac OSX debido a que select.poll() no es compatible. Ver: stackoverflow.com/questions/19740471/…

Según lo sugerido por Gilles, este es el más fácil y funciona perfectamente:

heroku logs | sort