Golden Signals
Los Golden Signals son una colección de métricas para aplicaciones y servicios que permiten establecer un framework mínimo para monitorear las operaciones de un sitio. El concepto se originó en el libro "Site Reliability Engineering" de Google.
El enfoque principal es monitorear el tráfico, errores, latencias, normalmente en términos de tasas, cantidad de errores y duración (RED - Rate Error Duration). Adicionalmente señales como la utilización de recursos (CPU, memoria) están consideradas.
El propósito de las Golden Signals es habilitar la observabilidad de las aplicaciones y servicios, flujos de clientes y las operaciones dentro de un marco estandarizado de señales. Los principales beneficios de usarlas son los siguientes:
-
Monitoreo consistente y alerta temprana en todos los servicios. 24/7 de señales como la Disponibilidad, Tráfico, Latencia, Errores y Despliegues.
-
Detección proactiva del desempeño del sitio o aplicación, detectando problemas antes de que un incidente ocurra.
-
Estandarización de la instrumentación, métricas, alertas y dashboards.
-
Mapeo de dependencias usadas en las relaciones de cliente servidor en los reportes de Golden Signals.
Señal (Signal) | ¿Qué analiza? | ¿Cómo se granulariza? | Métrica |
---|---|---|---|
Availability (Disponibilidad) |
Analiza la disponibilidad de los servidores |
Se puede analizar por regiones de data center |
Porcentaje de Servidores Saludables (%). |
Traffic (Tráfico) |
Analiza las respuestas con estado 2xx |
Se puede analizar por regiones de data center |
Cantidad de Peticiones (Throughput, Rendimiento) por Segundo |
Latency (Latencia) |
Analiza el tiempo de respuesta |
Se puede analizar por regiones de data center |
Tiempo de respuesta en milisegundos |
Errors (Errores) |
Analiza las respuestas con estado distinto a 2xx (4xx, 5xx) |
Se puede analizar por regiones de data center, además de códigos de estado |
Tasa de Respuestas Erróneas vs Respuestas Correctas |
Deployments (Despliegues) |
Analiza el estado y salud de los despliegues |
Se puede analizar por servicio y/o aplicación |
Timestamps (Anotaciones de tiempo) |
Saturation (Saturación) |
Analiza el estado de la CPU, RAM y Disco de los servidores |
Se puede analizar por servicio y/o aplicación y elemento (CPU, RAM, Uso de Disco) |
Porcentaje % De Uso |
Alertas
Al monitorear utilizando las Golden Signals nos permite definir alertas para ser gatilladas en distintas cirscuntancias. Principalmente hay dos tipos de alertas, de límite fijo y las basadas en tendencias.
Las alertas deberían ser habilitadas cuando un artefacto está listo para operar en producción. Todos los miembros del equipo asociados al artefacto deberían ser receptores de las alertas, en por lo menos canales de Email y mensajería instantánea como Slack o similares. Además de las alertas de Golden Signals cada equipo puede definir alertas personalizadas que sean relevantes para su contexto.
Alertas de Límite Fijo
Las alertas de límite fijo (Fixed threshold alerts) son creadas con un número definido y fijo que la métrica debe ser evaluada de forma instantánea o tasada por un período de tiempo. Este valor puede variar dependiendo de la aplicación y contexto.
Un servicio cuya cantidad de servidores debe ser mayor a 5. Si baja de ese número de servidores activos se lanzará una alerta.
Alertas Basadas en Tendencias
Las alertas basadas en tendencias (Trend based alerts) son las que realizan una comparación de las métricas actuales con datos en distintos puntos de tiempo. Normalmente con los datos de hace 24 horas y con los datos hace 1 semana para el mismo periodo de tiempo. Este tipo de alertas utiliza la desviación estándar entre las métricas. La desviación estándar se utiliza para calcular la variación o dispersión en la que los puntos de datos individuales difieren de la media. Una desviación baja indica que los puntos de datos están muy cerca de la media, mientras que una desviación alta muestra que los datos están dispersos en un rango mayor de valores. [ortega-2024]. En el caso de una alerta, obtener la desviación estándar de la métrica nos permite contemplar si la desviación de la tendencia normal es orgánica o debido algún problema.
En el caso de las alertas de Golden Signal son mayoritariamente basadas en tendencias, con muy pocas basadas en límites fijos para evitar falsos positivos.
Un servicio cuya data es evaluada todos los días entre las 2:00 PM y las 2:15 PM. Esta data se compara con la medición de ayer entre las 2:00 PM y las 2:15 PM, como también con la medición de 1 semana atrás entre las 2:00 PM y las 2:15 PM. Si la desviación estándar es más de 2, se debe lanzar una alerta. (Esto significa que la métrica se ha desviado 2 veces).
Automatización y Estandarización de Alertas
Cuando existen diferentes equipos dentro de una organización existe la tendencia de que cada uno utilice sus propias herramientas y formas de crear dashboards. Lo que dificulta la implementación de las Golden Signals debido a la fragmentación. Además si el proceso de implementación de alertas es manual se puede volver tedioso y lento con mayor probabilidad de fallos (consultas incorrectas, omisión de alertas clave) por error humano al crearlos. Es por esto que es altamente recomendado estandarizar los dashboard y generar plantillas que permiten automatizar la generación de las consultas y las alertas. Al automaizar la generación se permite reducir a minutos la creación de alertas y tener mayor exactitud.
Para esto se dan las siguientes recomendaciones:
-
Utilizar Grafana como sistema de dashboard estándar.
-
Utilizar scripts estandarizados con plantillas para generar las alertas y consultas.
El siguiente código es un pequeño ejemplo en el lenguaje Elixir que permite generar un texto a partir de una plantilla. Para ésto se utiliza la herramienta de plantillas EEx.
iex> EEx.eval_string "Hola, <%= @name %>", assigns: [name: "Camilo"]
"Hola, Camilo"
La relación entre los datos, plantillas, script y alertas se puede diagramar de la siguiente manera.
Además de estandarizar y automatizar la generación de alertas, se recomienda automatizar el proceso de deployment de las mismas, utilizando algún workflow de Github actions por ejemplo.