Monitoreo: Diarios para DevOps

JJ Ruescas
6 min readNov 18, 2018

¿Alguna vez escribiste sobre tu vida en un diario y volviste a leer su contenido después de unos meses o años?¿…Qué fue lo que aprendiste de ti en retrospectiva?

El escribir en un diario es una práctica saludable que nos ayuda a encontrar patrones de comportamiento que solo el paso del tiempo y sus páginas nos ayudan a identificar.📝

Monitoreo de mi Peso (en libras) — FitBit App

Durante los últimos años creé diarios digitales (“monitoreé”) de distintas áreas de mi vida como: la cantidad de pasos y calorías quemadas con FitBit, la calidad de mi sueño (y como mejorarlo) con SleepCycle, las emociones del día a día con MoodMeter y el tiempo invertido en las actividades diarias con ATracker.

Gary Wolf, uno de los creadores de la comunidad “Quantified Self” dice lo siguiente:

“Registrar en un diario es considerado admirable. Registrar en una hoja de cálculo en es considerado extraño.”

Pues sí. Registrar información histórica en formas estructuradas suena extravagante y de excesivo esfuerzo, y por esta razón, muchos equipos de software y operaciones abandonan la idea de “tomar el pulso” a sus sistemas incluso antes de intentarla. Lastimosamente esa decisión los deja ciegos y sordos acerca de problemas existentes en las entrañas de los productos y la infraestructura, y peor aún, los deja inconscientes acerca de oportunidades evidentes que los llaman desesperadamente. 🙈🙉

Monitoreo

Actualmente contamos con herramientas tecnológicas respetables para monitorear y generar diarios del funcionamiento de nuestro cuerpo y mente como vimos anteriormente, pero principalmente, contamos con herramientas altamente sofisticadas (y muchas veces gratuitas) para monitorear incluso detalles mínimos de los productos que creamos y la infraestructura que los soporta.

El monitoreo en la tecnología es sumamente importante por una simple razón: ni tú ni yo tenemos la habilidad de visualizar el flujo de bits creado en la interacción de los usuarios y nuestros productos. En esencia, este flujo transporta el conocimiento que necesitamos para progresar.

Herramientas como Prometheus y InfluxDB, CloudWatch de AWS, NewRelic y Grafana nos ayudan a colectar cientos de métricas comunes utilizadas en la industria así como también métricas personalizadas, y a desplegarlas en Dashboards (Tableros) intuitivos para los humanos. Así mismos, Splunk, SumoLogic o GrayLog nos permiten recolectar información desde log files en arquitecturas distribuidas o incluso dentro de Containers.

Time-Series Data

Herramientas como las mencionadas anteriormente combinan Agentes de Recolección de información y Time-Series Databases (Bases de Datos de Series de Tiempo). Esta combinación tiene por propósito el “tomar fotografías” continuamente de las métricas relevantes para tu equipo, asignarles una fecha y hora y almacenar cada fotografía en orden cronológico para así permitirte ver en retrospectiva los cambios progresivos a través de estas fotografías.

Time-series Database — Una colección de “fotografías” tomadas en el tiempo, las cuales nos permiten descubrir patrones de comportamiento.

Al recolectar información de esta manera y analizarla en retrospectiva descubrimos patrones. Algunos de estos son intuitivos, por ejemplo que tu aplicación de venta de tickets es mayormente utilizada para funciones de películas los fines de semana. Pero, hay otros patrones que no son tan fáciles de identificar, por ejemplo: el aumento de consumo en la memoria de un servidor de base de datos (algún desarrollador dejó una conexión abierta), o un feature de tu producto que es sorpresivamente más utilizado de lo que esperabas (y que te invita a desarrollarlo más).

Tipos de Monitoreo

Hablemos específicamente de tres tipos:

  1. Monitoreo del Negocio

Cada negocio tiene objetivos diferentes, pero generalmente todos coinciden en la reducción de costos operativos y la maximización de ganancias. Para controlar si estos objetivos se están concretando o no, se utilizan KPIs (Key Performance Indicators/Indicadores Clave de Rendimiento) los cuales son desplegados en Dashboards (monitores) para así ayudar al negocio a tomar decisiones.

Algunos ejemplos específicos acerca de métricas que los negocios consideran son: número de reproducciones en un servicio de streaming (Netflix o Spotify), cantidad de likes que un usuario otorga a sus contactos (Facebook, Twitter), total de ventas por mes a través de una campaña de marketing (Amazon), etc.

2. Monitoreo de Servidores

Por lo general, cuando se habla de “Monitoreo” en IT, se piensan en este tipo de monitoreo donde tenemos pantallas controlando métricas del Sistema Operativo como el consumo de CPU, Memoria RAM disponible, espacio en Disco Duro, o métricas que reflejan la salud del Cluster Kubernetes o del servidor de Base de Datos en Producción.

3. Monitoreo de Aplicación

Para lograr monitorear cualquier aplicación es necesario instrumentarla en primer lugar, de esta manera podemos medir el nivel de su rendimiento, detectar problemas o simplemente escribir información de rastreo sobre su funcionamiento.

Log files (archivos de registro), la cantidad de solicitudes http o incluso las visitas a ciertas páginas dentro de su sitio web (utiliza Google Analytics para capturar estos datos), son las fuentes de la información para visualizar las “tripas” de tus aplicaciones.

Profetas de la Era Digital

Cuando conoces el pasado y recuerdas que este suele repetirse en intervalos, entonces eres capaz de “pronosticar” comportamientos futuros en tu aplicación y con algo de suerte en el mercado.‍🧙🔮

El monitorear tus sistemas para tomarles el pulso, mantener su información histórica y analizarla con el lente científico, te ayudará a estar mejor preparado para lidiar con imprevistos. Además de esto, monitorear disciplinadamente te permitirá definir un “Estado Base” — un rango de comportamiento que se considera normal en el día a día de un sistema —para identificar comportamientos fuera de lo esperado o mejor aún, para permitirte experimentar, por ejemplo lanzando nueva funcionalidad o campañas de marketing y así iterar tu camino al éxito.

Tres consejos sobre Monitoreo

Simplifica

Monitorear no implica añadir esfuerzo adicional al ciclo de vida del desarrollo y operación de aplicaciones, siempre y cuando los componentes requeridos para recolectar la información son creados y configurados automáticamente.

Por ejemplo, en lugar de instalar agentes de monitoreo en servidores nuevos y actualizar los dashboards continuamente para tomar en cuenta a dichos agentes, es posible incorporar los agentes de monitoreo como parte de tus Templates de Máquinas Virtuales o como parte de tus Imagenes Docker, de manera que al levantar instancias de estos, dichos agentes inmediatamente empiecen a enviar información a la herramienta de monitoreo que hayas seleccionado.

Evita los extremos

Evita estas dos situaciones como si fueran la plaga🚫:

  • “Monitorear” no es una tarea. Con esto me refiero a que no es necesario tener a una persona viendo la subida y bajada del consumo de memoria o cuantos clicks se realizan en el botón “Comprar” en tu sitio E-Commerce.
  • Tener monitoreo en funcionamiento con Dashboards reflejando información útil y NUNCA revisarlos.

Ambos extremos son dañinos, así que para encontrar el punto medio, sigue el siguiente consejo.

Genera el hábito

Genera un hábito de estudiar la información en los Dashboards por lo menos unos minutos una vez por semana. Esto es suficiente para permitirte descubrir patrones en el comportamiento de los sistemas y usuarios.

Con esa frecuencia descubrirás la ausencia de información relevante que debe ser añadida a los Dashboards, y así lograrás madurar tu práctica de monitoreo paulatinamente.

Para finalizar, la pregunta es: ¿Qué debemos monitorear? … Los ingenieros de Esty, una de las empresas unicornio en DevOps responden de la siguiente manera:

“Si se mueve, se monitorea. Si no se mueve, se monitorea de todas maneras, por si decide moverse.” — Ian Malpass, Etsy

A pesar de que estoy totalmente de acuerdo con esto cuando se tiene a un nivel óptimo de monitoreo (cinturón negro en el modelo de madurez), para iniciar la práctica sugiero que analices qué es aquello que te estuvo causando problemas recientemente. ¿Te quedaste sin espacio en disco en Servidores en Producción?¿El nuevo feature de tu producto no tiene el éxito que esperabas?¿Se incrementaron las quejas sobre la calidad de tu servicio?🤓

No lo olvides: CI/CD funcionan siempre y cuando se tenga CM (Continuous Monitoring) brindando feedback constante.

Keep on learning…and monitoring!

Como siempre, por favor déjame tu feedback en un comentario en este artículo. ¿Te fue útil?¿Qué aumentarías o quitarías?¿Otras sugerencias? También puedes enviarme un tweet a @jjruescas1 y colocar #DevOps al final para poder encontrarlo.🙂

¿Deseas conocer más sobre DevOps? No olvides revisar el curso DevOps — Las Artes Marciales del Softwareen Udemy.com.

--

--