viernes, 23 de diciembre de 2022

Metricas y alertas

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.

  1. 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.
  2. 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

 

martes, 15 de noviembre de 2022

Tipos de inteligencia artificial (mapa)

version en video:




Voy a empezar con el mapa completo por que posiblemente si suena conocido no va tener nada nuevo este articulo(y se puede saltar + rápido :D)




La idea es entonces ir colocando las explicación los conceptos y bajar por el árbol agregando nuevos conceptos de manera de queden relacionados.



Es una disciplina que estudia las máquinas con comportamientos inteligentes.



El machine learning es como se consigue esta inteligencia artificial usando generalmente tecnicas que tiene su fundamento en las matematicas y en la estadistica(este articulo tiene una buena explicacion de la diferencia https://azure.microsoft.com/en-us/solutions/ai/artificial-intelligence-vs-machine-learning/#process)



Aprendizaje supervisado. Es una de las 3 divisiones del machine learning que estudia problemas donde ya sabemos que queremos encontrar, de hecho tenemos etiquetas que nos indican el valor a predecir. ejemplos de esto pueden ser una tabla donde tenemos información de viejos clientes y ex-clientes donde marcamos cuales se fueron y queremos generar un modelo para saber que un cliente se va ir(para tal vez ofrecerle un descuento y/o evitar perderlo)



Aprendizaje no supervisado. en este como su nombre lo dice no se tiene una supervisión o una etiqueta con ejemplos previos de lo que queremos encontrar. Aqui un dato curioso que escuche hay grupos dentro de la ia que creen mucho en este tipo de machine learning por que se considera un aprendizaje más real al ser casi espontáneo



Aprendizaje por refuerzo: Esta es la tercera categoria, donde los modelos son premiados o castigados basado en que tan bien son capaces de conseguir una actividad. una de las areas grande de uso de estos modelos es en los videojuegos un ejemplo pueden ser modelos que juegan juegos como ajedrez o league of legends donde se le deja al modelo realizar acciones con las entradas(los controles del juego) y se le da el info del input(lo que se muestra en pantalla/sonidos/posiciones de las fichas) y el modelo es premiado/reforzados cuando hacen cosas que aumente el puntaje en el juego.



Clasificación y regresión: son los 2 tipos de divisiones que se le dan a los algoritmos de aprendizaje supervisado en la clasificación los algoritmos buscan encontrar a qué grupo pertenecen los datos por ejemplo (comprar,vender)(manzanas,peras,sandias). mientras que en la regresion el objetivo es una variable con valores infinitos algunos ejemplos pueden ser la temperatura global, ingresos anuales (se usa para valores numéricos)



Reducción de dimensionalidad, agrupación o detección de anomalías: son los 3 grupos donde esta el aprendizaje no supervisado.

  • La reducción de la dimensionalidad se usa especialmente para poder visualizar los datos reducidos a 2 o 3 dimensiones que son la que podemos ver los humanos. básicamente consiste en que se tienen datos con n dimensiones y llevamos esos datos a otro donde la dimensión sea menor a n
  • Agrupación: a mi se me hace muy parecido a la clasificación del aprendizaje supervisado, lo que la diferencia con la clasificación es que no sabemos que grupos espontáneos se van a generar en el algoritmo (y no deberíamos tener grupos previamente catalogados). como dato curioso nos mostraron un método que llaman el método del codo(https://en.wikipedia.org/wiki/Elbow_method_(clustering)) para escoger el número correcto de clusters(o grupos dentro de la agrupación)
  • Detección de anomalías: en este tipo de algoritmos tenemos una serie de información y queremos que el algoritmo, nos diga cuando algo anormal esta pasando en los datos. por ejemplo el uso de memoria de una base de datos y queremos detectar anomalías para saber si las operaciones bajaron de manera drástica o subieron de manera drástica (y entrar a revisar por que se presenta la anomalía en el momento de que se presenta donde se pueden capturar evidencias más fácilmente)



El aprendizaje por refuerzo no se ha explicado(creo que no se explica) pero igual se mencionó en la clasificación global, conocer estas clasificaciones puede ser valioso para por ejemplo si se tiene un problema de tipo regresión, saber que se pueden buscar algoritmos de aprendizaje supervisado de tipo regresión(que hay mucho) y así para cada uno. tambien para ubicar los conceptos de manera conectada pues nos permite recordar mejor la informacion

 

fuentes: