version en video
SRE
Hacen parte de algo a lo que se llama SRE (Software Reliability Engineering) Ingeniería de Confiabilidad del Software que mediante técnicas busca conseguir que el software sea más confiable es decir que las veces que un sistema deje de funcionar inesperadamente sean menos, y que si se cae el sistema que se puede recuperar y en el menor tiempo posible..
A su vez las métricas y alertas hacen parte de algo que se llama monitoreo y observabilidad(dentro de SRE)
- El monitoreo está encaminado a reconocer cuando algo se daña(ejemplos peticiones que no responden, bases de datos abajo etc)
- La observabilidad por el otro lado está más encaminada a poder determinar el estado del sistema (uso de memoria, lag en un tópico)
Ambos aunque atacan dominios un poco diferentes tienden a resolver con estrategias/herramientas similares
Las metricas
Las métricas es una de esta herramientas, esta permiten conocer el estado de un sistema mediante estas podemos medir lo que pasa para avisar en el lado del monitoreo y generar alertas, o para hacer visible el estado del sistema su uso, recursos disponibles etc.
Algunos ejemplos de métricas pueden ser cuánto tiempo tomaron las peticiones a un servicio en el percentil 95, el uso de memoria de una aplicación, el uso de procesador, el número de mensajes no procesados en un tópico, el número de instancias arriba de un aplicación, el número de logs de errores de una aplicación.
En realidad para el valor numérico que queramos medir podemos crear una métrica(en muchos casos las más comunes ya vienen expuestas por defecto).
Las métricas son en realidad un número dentro de una serie de tiempo, a menudo son livianas pero sino tenemos cuidado como dice el estudio DORA 's pueden salirse de las manos por tanto recomienda estar pendiente de 2 factores al generar métricas.
- la cardinalidad de las mismas por ejemplo generar una métrica x por cada cliente es una cardinalidad 1 a 1 entre clientes y métrica, y esto es riesgoso por que los clientes son muchos (dígase cliente o cualquier elemento del dominio en el que trabajemos juegos, proveedores etc). por tanto debemos tener cuidado de no saturar el sistema con esto.
- la dimensionalidad: no es lo mismo registrar una métrica solo con su nombre a ponerle cosas como namespace, nombre del nodo donde corre, ip del servidor, nombre del cluster, etc. entre más etiquetas mayor la dimensionalidad y con esto debemos tener cuidado. los sistema de métricas son para estas no para guardar cualquier tipo de información
de cualquier manera llevar lo anterior a los extremos también es malo por ejemplo una métrica de logs de errores es mucho más valiosa para mi si incluye la aplicación donde se presentan los errores por que sino en un ambiente de muchos servicios va a ser difícil encontrar cual es la app que falla, el punto ideal está en incluir suficiente información para diagnosticar el problema rápidamente sin llevarlo al punto donde se tumbe el sistema de monitoreo por querer incluir toda la información posible en las métricas.
Las alertas
Teniendo ya las métricas el siguiente paso son las alertas, estar revisan el valor de las métricas y según si pasan una condición (por ejemplo si el valor en los últimos 5 minutos es mayor a 10) se disparan por ejemplo si una métrica es respuestas de este servicio donde se respondió con un status code 500, una alerta que use esta métrica podría ser si hay mas de 10 en el último minuto dispararse.
Hacen falta las alertas por que para lograr recuperar rápidamente un sistema, a menudo no es suficiente que los usuarios del mismo avisan del problema porque entonces puede que eso demore mucho (por que el proceso largo o por que a los usuarios les da pereza/no saben cómo avisar) entonces para disminuir el tiempo que toma recuperar un sistema a menudo se usan alertas estas permiten detectar cuando algo está mal
El disparar una alerta implica que el sistema no esta como se espera y que posiblemente se deba revisar. Debido a que las cosas pueden estar mal en diferentes niveles es decir no es lo mismo que una aplicación esta al 95% de uso de memoria a que una aplicación esté al 98%, depende de la aplicación en específico puede ser que el 95% de espera(es preocupante pero se puede revisar mas tarde), pero el 98% indique que la aplicación pronto se va caer por falta de memoria(por tanto se debe revisar lo mas pronto posible).a menudo se usa para esto las palabras P1,P2,P3 (prioridad 1, prioridad 2, prioridad 3) para indicar que tan grave es la alerta P1 siendo la más grave y la que indica detener cualquier cosa que se este haciendo y revisar, mientras P2,P3 que algo está mal.
Mencionando el P1 me parece importante resaltar también la recomendación del estudio de DORA’s devops que dejo abajo(en recursos) que no se deberían generar P1 por cosas que no afecten a nuestros usuario, de hecho no es buena idea generar alertas por cosas que no afecten a los usuarios pues cada alerta genera ruido y debe poder hacerse algo para solucionarla no solo informar pues esto puede llevar a que las alertas se ignoren cuando en realidad pase algo malo en el sistema.
Herramientas para:
Para la implementación de un sistema de métricas y alertas solo puedo decir las herramientas que he usado, prometheus para almacenar las métricas, el alert manager de prometheus también permite realizar queries sobre esta información y generar alertas, incluso integrando otros servicios para por ejemplo publicar las alertas a slack u otro servicio donde se informe de la alertas (por ejemplo mediante correos, llamadas, mensajes de texto) aunque en el landscape de CNCF se pueden encontrar sistemas que posiblemente hacen cosas parecidas https://landscape.cncf.io/card-mode?category=observability-and-analysis&grouping=category
Por fuera de las alertas para visualizar las métricas(y más del lado de observabilidad) existe grafana una herramienta que permite visualizar las métricas en dashboard o tableros donde los gráficos se actualizan en tiempo real con las métricas que llegan
Recursos:
https://prometheus.io/docs/concepts/metric_types/
https://cloud.google.com/architecture/devops/devops-measurement-monitoring-and-observability