Evaluaciones as_count() en monitores
Las consultas que utilizan modificadores as_count() y as_rate() se calculan de formas que pueden producir resultados diferentes en las evaluaciones de monitores. Los monitores que incluyen la aritmética y al menos 1 modificador as_count() utilizan una ruta de evaluación independiente que cambia el orden en el que se realizan la aritmética y la agregación temporal.
Ejemplo de tasa de error
Supongamos que quieres monitorizar una tasa de error durante 5 minutos utilizando las métricas requests.error y requests.total. Considera una única evaluación realizada con estos puntos de series temporales alineados para el marco temporal de 5 minutos:
Numerador: sum:requests.error{*}
| Timestamp | Value |
|:--------------------|:------|
| 2018-03-13 11:00:30 | 1 |
| 2018-03-13 11:01:30 | 2 |
| 2018-03-13 11:02:40 | 3 |
| 2018-03-13 11:03:30 | 4 |
| 2018-03-13 11:04:40 | 5 |
Denominador: sum:requests.total{*}
| Timestamp | Value |
|:--------------------|:------|
| 2018-03-13 11:00:30 | 10 |
| 2018-03-13 11:01:30 | 10 |
| 2018-03-13 11:02:40 | 10 |
| 2018-03-13 11:03:30 | 10 |
| 2018-03-13 11:04:40 | 10 |
Haz referencia a esta consulta como classic_eval_path:
sum(last_5m): sum:requests.error{*}.as_rate() / sum:requests.total{*}.as_rate()
Y a esta consulta como as_count_eval_path:
sum(last_5m): sum:requests.error{*}.as_count() / sum:requests.total{*}.as_count()
Compara el resultado de la evaluación en función de la ruta:
| Ruta | Comportamiento | Expresión ampliada | Resultado |
|---|
classic_eval_path | Función de agregación aplicada después de la división | (1/10 + 2/10 + 3/10 + 4/10 + 5/10) | 1.5 |
as_count_eval_path | Función de agregación aplicada antes de la división | (1+2+3+4+5) / (10+10+10+10+10) | 0.3 |
Fíjate que las dos evaluaciones anteriores son matemáticamente correctas. Elige el método que mejor se adapte a tus intenciones.
Puede ser útil visualizar la classic_eval_path como:
Y la as_count_eval_path como:
sum(last_5m):error
-----------------
sum(last_5m):total
En general, la agregación temporal avg con .as_rate() es razonable, pero la agregación sum con .as_count() es la recomendada para las tasas de error. No tiene sentido utilizar los métodos de agregación distintos de sum con (y no pueden utilizarse con) .as_count().
Si tienes alguna pregunta, ponte en contacto con el equipo de asistencia de Datadog.