Consejo Windows Azure #1: El log es su amigo

,
Como parte de mi trabajo tengo que mantener una aplicación de alta concurrencia en Windows Azure. Sabiendo que las máquinas virtuales de Azure son cajas negras  (no me puedo conectar y ver qué ocurre "en vivo") tengo que confiar en los Logs y en los Performance Counters para ver la "salud" de la aplicación.

Una explicación bastante detallada de qué tipos de Logs hay en Azure puede ser accedida en este link.

El consejo es aprovechar los Logs y a la vez ser prudentes en su utilización:

  • Si se detecta un error, registrarlo mediante Trace.TraceError, utilizando la mayor cantidad de detalles que ayuden a su diagnóstico.
  • Si se detecta una validación fallida o un error recuperable, registrarlo mediante Trace.TraceWarning, siendo específico en el evento.
  • Para cualquier evento útil de ser notificado (se inicia el server, cambio de configuración, ocurrió un evento importante que no representa error), registrarlo mediante Trace.TraceInformation, intentando no excederse en la cantidad de información y en la cantidad de mensajes.
Teniendo esto en cuenta vamos a registrar sólo los eventos que representan un error o nos interesan por su importancia. Ahora, ¿qué ocurre con los datos históricos? Windows Azure no tiene un proceso establecido para expirar los datos por fecha, y si quiero eliminar entradas en el Log manualmente, voy a estar abonando cada operación (centavos, pero igual las estaría abonando). Si no elimino entradas viejas en el log, voy a abonar no sólo las entradas que se agreguen al Log como parte de la vida de la aplicación sino que también voy a pagar el almacenamiento de las entradas "viejas". A fin de evitar este costo "escondido", un consejo es realizar el siguiente procedimiento:
  • Crear una cuenta de "storage" en donde temporalmente se guardarán los Logs. Esto no implica un costo adicional.
  • Modificar la configuración de la aplicación para apuntar a los nuevos Logs. Esperar a que todas las máquinas virtuales se reinicien con la nueva configuración.
  • Eliminar las tablas que comiencen con WAD (WADLogsTable, WADPerformanceCountersTable, etc.). La eliminación de tablas completas es un proceso que se realiza automáticamente en diferido. Eliminar un par de Gbs puede llevar un par de horas. Eliminar un par de Tbs puede levar días. No se deje estar! :)
  • Para verificar que se puede utilizar el "storage" anterior, intentar crear a mano la tabla WADLogsTable. Si arroja un error 409 (Conflict), esperar e intentar luego.
  • Modificar la configuración de la aplicación para apuntar a los "viejos" Logs. Esperar a que todas las máquinas virtuales se reinicien con la nueva configuración.
  • Eliminar la cuenta de "storage" de Logs temporales.
Espero que les sea útil.

0 comentarios:

Publicar un comentario