Categorías

Última actualización: 17 de septiembre de 2020

Los registros de una aplicación Heroku se agregan a partir de los flujos de salida de todos sus procesos en ejecución, componentes del sistema y servicios de respaldo. Logplex de Heroku enruta los flujos de registro de todas estas fuentes diversas en un solo canal, proporcionando una base para el registro integral.

Tipos de registros

Registros de tiempo de ejecución

Heroku agrega las siguientes categorías de registros para una aplicación desplegada:

  • Registros de la aplicación – Salida de registro de la propia aplicación. Esto incluye los registros generados por el código y las dependencias de tu aplicación. (Filtro: --source app)
  • Registros del sistema – Mensajes sobre las acciones realizadas por la infraestructura de la plataforma Heroku en nombre de tu aplicación, tales como: reiniciar un proceso bloqueado, dormir o despertar un dyno web, o servir una página de error debido a un problema en tu aplicación. (Filtro: --source heroku)
  • Registros de la API – Mensajes sobre las acciones administrativas llevadas a cabo por usted y otros desarrolladores que trabajan en su aplicación, tales como: el despliegue de nuevo código, el escalado de la formación del proceso, o la activación del modo de mantenimiento. (Filtro: --source app --dyno api)
  • Registros del complemento – Mensajes de los servicios del complemento. Consulte el artículo del Centro de desarrollo del complemento para obtener más detalles. (El filtro varía según el complemento)

Registros de construcción

Los registros que se generan durante la construcción y el despliegue de la aplicación son independientes de los registros de tiempo de ejecución de la aplicación. Los registros para las construcciones exitosas y no exitosas están disponibles en la pestaña Activity de tu aplicación en el Dashboard de Heroku:

Captura de pantalla de

Haz clic en View build log para cualquier evento de construcción en el Activity Feed para ver sus registros:

Captura de pantalla de

Límites del historial de registros

Logplex está diseñado para cotejar y enrutar los mensajes de registro, no para almacenarlos. Conserva las 1.500 líneas más recientes de tus registros consolidados, que expiran después de 1 semana.

Para una persistencia de registros más preparada para la producción, puedes añadir uno de los complementos de registro disponibles en la plataforma Heroku a tu aplicación. La mayoría de estos complementos ofrecen un plan gratuito para empezar.

Alternativamente, puedes implementar tus propios drenajes de registro para tener un control total sobre lo que ocurre con tus registros.

Escribir en tu registro

Cualquier cosa que tu aplicación escriba en la salida estándar (stdout) o en el error estándar (stderr) se captura en tus registros. Esto significa que puedes registrar desde cualquier parte del código de tu aplicación con una simple sentencia de salida.

En Ruby, podrías usar algo como:

puts "Hello, logs!"

En Java:

System.err.println("Hello, logs!");System.out.println("Hello, logs!");

Lo mismo ocurre con todos los demás lenguajes soportados por Heroku.

Para aprovechar el registro en tiempo real, puede que necesites desactivar cualquier búfer de registro que tu aplicación esté realizando. Por ejemplo, en Ruby, añada esto a su archivo config.ru:

$stdout.sync = true

Algunos frameworks envían la salida del registro en algún lugar distinto de stdout por defecto. Estos pueden requerir una configuración adicional. Por ejemplo, si utilizas Ruby on Rails TaggedLogger de ActiveSupport, debes añadir lo siguiente en la configuración de tu aplicación para obtener un registro stdout:

config.logger = Logger.new(STDOUT)

Recuperación de registros a través de CLI

Ver registros

Para obtener los registros más recientes de tu aplicación, utiliza el comando heroku logs:

$ heroku logs2010-09-16T15:13:46.677020+00:00 app: Processing PostController#list (for 208.39.138.12 at 2010-09-16 15:13:46) 2010-09-16T15:13:46.677023+00:00 app: Rendering template within layouts/application2010-09-16T15:13:46.677902+00:00 app: Rendering post/list2010-09-16T15:13:46.678990+00:00 app: Rendered includes/_header (0.1ms)2010-09-16T15:13:46.698234+00:00 app: Completed in 74ms (View: 31, DB: 40) | 200 OK 2010-09-16T15:13:46.723498+00:00 heroku: at=info method=GET path="/posts" host=myapp.herokuapp.com" fwd="204.204.204.204" dyno=web.1 connect=1ms service=18ms status=200 bytes=9752010-09-16T15:13:47.893472+00:00 app: 2 jobs processed at 16.6761 j/s, 0 failed ...

En este ejemplo, la salida incluye líneas de registro de uno de los dynos web de la aplicación, el router HTTP de Heroku y uno de los workers de la aplicación.

El comando logs recupera 100 líneas de registro por defecto. Puedes especificar el número de líneas de registro a recuperar (hasta un máximo de 1.500 líneas) utilizando la opción --num (o -n).

$ heroku logs -n 200

Cola en tiempo real

De forma similar a tail -f, la cola en tiempo real muestra los registros recientes y deja la sesión abierta para que los registros en tiempo real fluyan. Al ver un flujo en vivo de registros de su aplicación, puede obtener información sobre el comportamiento de su aplicación en vivo y depurar los problemas actuales.

Puede hacer cola en sus registros utilizando --tail (o -t).

$ heroku logs --tail

Cuando haya terminado, presione Ctrl+C para volver al prompt.

Una sesión de cola en tiempo real se termina automáticamente después de una hora de inactividad.

Formato del registro

El formato de salida del comando heroku logs es el siguiente:

timestamp source: message
  • Sello de tiempo – La fecha y la hora registradas en el momento en que la línea de registro fue producida por el banco de potencia o el componente. La marca de tiempo está en el formato especificado por RFC5424, e incluye precisión de microsegundos.
  • Fuente – Todos los dynos de su aplicación (dynos web, background workers, cron) tienen la fuente, app. Todos los componentes del sistema de Heroku (enrutador HTTP, gestor de dyno) tienen la fuente, heroku.
  • Dyno – El nombre del dyno o componente que escribió la línea de registro. Por ejemplo, el trabajador #3 aparece como worker.3, y el router HTTP Heroku aparece como router.
  • Mensaje – El contenido de la línea de registro. Las líneas generadas por dynos que superan los 10000 bytes se dividen en trozos de 10000 bytes sin nuevas líneas finales adicionales. Cada trozo se envía como una línea de registro separada.

Filtrado

Si sólo desea obtener registros con un determinado origen, un determinado banco de pruebas, o ambos, puede utilizar los argumentos de filtrado --source (o -s) y --dyno (o -d):

$ heroku logs --dyno router2012-02-07T09:43:06.123456+00:00 heroku: at=info method=GET path="/stylesheets/dev-center/library.css" host=devcenter.heroku.com fwd="204.204.204.204" dyno=web.5 connect=1ms service=18ms status=200 bytes=132012-02-07T09:43:06.123456+00:00 heroku: at=info method=GET path="/articles/bundler" host=devcenter.heroku.com fwd="204.204.204.204" dyno=web.6 connect=1ms service=18ms status=200 bytes=20375$ heroku logs --source app2012-02-07T09:45:47.123456+00:00 app: Rendered shared/_search.html.erb (1.0ms)2012-02-07T09:45:47.123456+00:00 app: Completed 200 OK in 83ms (Views: 48.7ms | ActiveRecord: 32.2ms)2012-02-07T09:45:47.123456+00:00 app: 1 jobs processed at 23.0330 j/s, 0 failed ...2012-02-07T09:46:01.123456+00:00 app: Started GET "/articles/buildpacks" for 4.1.81.209 at 2012-02-07 09:46:01 +0000$ heroku logs --source app --dyno worker2012-02-07T09:47:59.123456+00:00 app: Article#record_view_without_delay completed after 0.02212012-02-07T09:47:59.123456+00:00 app: 5 jobs processed at 31.6842 j/s, 0 failed ...

Cuando se filtra por banco de pruebas, el nombre base (por ejemplo, --dyno web) o el nombre completo (por ejemplo --dyno web.1) se puede utilizar.

También puede combinar los interruptores de filtrado con --tail para obtener un flujo de salida filtrado en tiempo real.

$ heroku logs --source app --tail

Ordenación de los mensajes de registro

Cuando recupere los registros, puede notar que no siempre están en orden cronológico exacto, especialmente cuando hay varios componentes involucrados. Los registros se originan a partir de muchas fuentes (nodos de enrutamiento, dynos, etc.) y se ensamblan en un solo flujo de registro por Logplex. Logplex en sí utiliza una arquitectura distribuida para garantizar una alta disponibilidad, lo que significa que los mensajes de registro podrían ser recogidos a través de múltiples nodos Logplex y por lo tanto ser entregados fuera de orden.

Recuperación de registros a través del tablero web

Ver registros

Puedes ver tus registros en la web iniciando sesión en tu tablero Heroku. Navega hasta la app que quieras ver por ejemplo https://dashboard.heroku.com/apps/<app-name>. Una vez en esta página seleccione «más» debería ver un menú desplegable:

En este menú seleccione «Ver registros».

Leave a Reply