Cómo monitorizar umbrales no estáticos

Información general

Un monitor de métricas típico activa una alerta si una única métrica supera un umbral específico. Por ejemplo, puedes configurar una alerta para que se active si el uso del disco supera el 80%. Este enfoque es eficiente para muchos casos de uso, pero ¿qué ocurre cuando el umbral es una variable en lugar de un número absoluto?

Los monitores con la tecnología Watchdog (a saber, de anomalías y outliers) son particularmente útiles cuando no hay una indicación explícita de que tu métrica se encuentra desviada. Sin embargo, cuando sea posible, deberías utilizar monitores normales con condiciones de alerta adaptadas para maximizar la precisión y minimizar el tiempo de alerta para tu caso de uso específico.

Esta guía cubre casos de uso comunes de alertas sobre umbrales no estáticos:

Umbral temporario

Contexto

Eres responsable del equipo encargado de un sitio web de comercio electrónico y quieres:

  • recibir alertas de tráfico inesperadamente bajo en tu página de inicio
  • captar incidentes más localizados como los que afectan a los proveedores públicos de Internet
  • anticipar situaciones de fallo desconocidas

El tráfico de tu sitio web varía de la noche al día y de los días laborables a los fines de semana. No existe un número absoluto para cuantificar lo que significa “inesperadamente bajo”. Sin embargo, el tráfico sigue un patrón predecible en el que puedes considerar una diferencia del 10% como un indicador fiable de un problema, como por ejemplo un incidente localizado que afecta a los proveedores de Internet pública.

Gráfico de líneas de una métrica periódica o temporaria

Monitor

Tu equipo mide el número de conexiones en tu servidor web NGINX utilizando la métrica nginx.requests.total_count.

La solicitud consta de 3 partes:

  1. Una consulta para obtener el número actual de solicitudes.
  2. Una consulta para obtener el número de solicitudes a la misma hora una semana antes.
  3. Consultas “fórmula” que calculan la relación entre las dos primeras consultas.

A continuación, define la agregación temporal:

  • Elige el marco temporal. Cuanto mayor sea el marco temporal, más datos se evaluarán para detectar una anomalía. Los marcos temporales más amplios también pueden dar lugar a más alertas de monitores, así que empieza con 1 hora y luego ajusta el marco temporal según tus necesidades.
  • Elige la agregación. Dado que se trata de una métrica de recuento que ejecuta una proporción, average (o sum) es una elección natural.

El umbral que aparece en la siguiente captura de pantalla se ha configurado en 0,9 para permitir una diferencia del 10% entre el valor de la primera consulta (actual) y el de la segunda (semana anterior).

Configuración para añadir la serie temporal _semana_anterior_ a la consulta de la métrica y establecer la fórmula a/b
{
    "name": "[Seasonal threshold] Amount of connection",
    "type": "query alert",
    "query": "sum(last_10m):sum:nginx.requests.total_count{env:prod} by {datacenter} / week_before(sum:nginx.requests.total_count{env:prod} by {datacenter}) <= 0.9",
    "message": "The amount of connection is lower than yesterday by {{value}} !",
    "tags": [],
    "options": {
        "thresholds": {
            "critical": 0.9
        },
        "notify_audit": false,
        "require_full_window": false,
        "notify_no_data": false,
        "renotify_interval": 0,
        "include_tags": true,
        "new_group_delay": 60,
        "silenced": {}
    },
    "priority": null,
    "restricted_roles": null
}

Umbral de referencia

Contexto

Eres responsable del equipo de control de calidad encargado de los procesos de compra en tu sitio web de comercio electrónico. Quieres asegurarte de que tus clientes tengan una buena experiencia y puedan comprar tus productos sin problemas. Un indicador de esto es la tasa de error.

El tráfico no es el mismo a lo largo del día, por lo que obtener 50 errores/minuto un viernes por la tarde es menos preocupante que obtener 50 errores/minuto un domingo por la mañana. Monitorizar la tasa de error, más que los errores en sí, ofrece una visión fiable de la apariencia que tienen las métricas saludables y las no saludables.

Recibe alertas cuando la tasa de error es alta, pero también cuando el volumen de ocurrencias es suficientemente significativo.

Monitor

Crea 3 monitores en total:

  1. Un monitor de métricas para alertar sobre el número total de ocurrencias.
  2. Un monitor de métricas para calcular la tasa de error.
  3. Un monitor compuesto que activa una alerta si los dos primeros monitores están en estado de ALERTA.

Monitor de métricas para alertar sobre el número total de ocurrencias

El primer monitor registra el número total de ocurrencias, tanto de aciertos como de fallos. Este monitor determina si la tasa de error debe activar una alerta.

<div class="shortcode-wrapper shortcode-img expand"><figure class="text-center"><a href="/?fit=max&amp;auto=format" class="pop" data-bs-toggle="modal" data-bs-target="#popupImageModal"><picture class=""  style="width:100%;"  >
        <img 
            class="img-fluid" 
            srcset="?auto=format" 
            style="width:100%;"  />
      </picture></a></figure>
</div>
{
    "name": "Number of hits",
    "type": "query alert",
    "query": "sum(last_5m):sum:shopist.checkouts.failed{env:prod} by {region}.as_count() + sum:shopist.checkouts.success{env:prod} by {region}.as_count() > 4000",
    "message": "There has been more than 4000 hits for this region !",
    "tags": [],
    "options": {
        "thresholds": {
            "critical": 1000
        },
        "notify_audit": false,
        "require_full_window": false,
        "notify_no_data": false,
        "renotify_interval": 0,
        "include_tags": true,
        "new_group_delay": 60
    }
}

Monitor de métricas para calcular la tasa de error

El segundo monitor calcula la tasa de error. Crea una consulta sobre el número de errores dividido por el número total de ocurrencias para obtener la tasa de error a / a+b:

<div class="shortcode-wrapper shortcode-img expand"><figure class="text-center"><a href="https://datadog-docs.imgix.net/images/monitors/guide/non_static_thresholds/reference_error_rate.5c0f5ca88cbc364b6446841751c99a58.png?fit=max&amp;auto=format" class="pop" data-bs-toggle="modal" data-bs-target="#popupImageModal"><picture class=""  style="width:100%;"  >
        <img 
            class="img-fluid" 
            srcset="https://datadog-docs.imgix.net/images/monitors/guide/non_static_thresholds/reference_error_rate.5c0f5ca88cbc364b6446841751c99a58.png?auto=format" 
            style="width:100%;"  alt="Configuración de un monitor de métricas que muestra la fórmula para calcular la tasa de error"  />
      </picture></a></figure>
</div>
{
    "name": "Error Rate",
    "type": "query alert",
    "query": "sum(last_5m):sum:shopist.checkouts.failed{env:prod} by {region}.as_count() / (sum:shopist.checkouts.failed{env:prod} by {region}.as_count() + sum:shopist.checkouts.success{env:prod} by {region}.as_count()) > 0.5",
    "message": "The error rate is currently {{value}} ! Be careful !",
    "tags": [],
    "options": {
        "thresholds": {
            "critical": 0.5
        },
        "notify_audit": false,
        "require_full_window": false,
        "notify_no_data": false,
        "renotify_interval": 0,
        "include_tags": true,
        "new_group_delay": 60
    }
}

Monitor compuesto

El último monitor es un monitor compuesto que envía alertas sólo si los dos monitores anteriores también están en estado de ALERTA.

Ejemplo de configuración de un monitor compuesto que muestra una lógica booleana para alertar cuando los dos monitores están en estado de ALERTA

Lectura adicional

Additional helpful documentation, links, and articles: