Los usos y diferencias de rate(), irate() y aumentar() en PromQL.
Cómo funcionan exactamente estas tres funciones a menudo puede causar confusión, por lo que este artículo analizará cada una de ellas con más detalle y cómo manejan los reinicios de contador, haciendo inferencias sobre los datos y llegando al valor final. . Tenga en cuenta que este artículo solo cubre las tres funciones mencionadas anteriormente con respecto a los contadores. Si desea realizar un seguimiento del crecimiento o disminución de la métrica de calibre, deberá utilizar las funciones delta() o deriv(), que cubriremos más adelante; artículos.
A continuación se proporcionan las diferencias entre las tres funciones que calculan la tasa de crecimiento de un contador:
Esta función calcula la tasa de crecimiento por segundo durante todo el período de muestreo.
Por ejemplo: rate(http_requests_total[5m]) proporciona la tasa promedio de solicitudes HTTP por segundo durante una ventana de 5 minutos.
Es decir, "tasa instantánea", esta función calcula la tasa de crecimiento por segundo como la tasa (), pero solo calcula las dos últimas muestras dentro del período de muestreo especificado, ignorando todas las muestras anteriores.
Por ejemplo: irate(http_requests_total[5m]) selecciona las dos últimas muestras en la ventana de 5 minutos especificada y calcula la tasa de crecimiento por segundo entre ellas. Esta función es útil si desea ampliar el gráfico para mostrar una respuesta rápida a un cambio en la tasa, y los resultados que mostrará tendrán más picos que los que muestra rate().
Esta función es idéntica a rate(), excepto que la unidad final no se convierte a "por segundo" (1/s). Cada período de muestreo definido es su unidad final.
Por ejemplo, aumentar(http_requests_total[5m]) devuelve el aumento total en el número de solicitudes HTTP procesadas durante el período de muestreo de 5 minutos (unidad: 1/5m). Por lo tanto, aumentar(foo[5m])/ (5 * 60) es equivalente a tasa(foo[5m]).
Estas tres funciones tienen el mismo requisito, es decir, todas necesitan al menos dos muestras dentro del período de muestreo especificado para ejecutarse. Las secuencias con menos de dos muestras se eliminarán de los resultados.
Cómo calcular con precisión el crecimiento del número de puntos de datos dentro de una ventana de tiempo fija es un problema que requiere compensaciones y aproximaciones incompletas. Prometheus elige lograr esto utilizando un número limitado de muestras dentro del período de muestreo proporcionado, para proporcionar la respuesta más correcta cuando se promedia. Veamos cómo hace esto.
La extrapolación de las funciones rate() y aumentar() suele ser confusa. Por ejemplo, para un contador que sólo incrementa en números enteros, aumentar() también puede devolver un resultado no entero, como 2,5883. Esto se debe a que incremento() obtiene una aproximación del incremento del contador en el rango total de la ventana de tiempo especificada (por ejemplo, 5 minutos en incremento(foo[5m]) ). Pero en realidad, la primera y la última muestra de una ventana de tiempo nunca coinciden exactamente con el inicio y el final de la ventana de tiempo especificada. Por lo tanto, aumentar() (y tasa()) extrapola la pendiente entre el primer y el último punto de datos de la ventana al límite de la ventana, lo que da como resultado un valor promedio que está más cerca del aumento esperado en toda la ventana (si Si la ventana El límite tiene muestras).
La siguiente figura muestra un ejemplo del uso de rate() con un tiempo de ventana de 1 minuto y un intervalo de muestreo de 15 segundos, donde el incremento real del contador en 1 ocurre una vez en la ventana.
Como se muestra, los resultados informados se extrapolan a los límites de la ventana en función de la pendiente entre la primera y la última muestra en la ventana (que es esencialmente correcta, consulte la siguiente sección Restablecimiento del contador) generada.
NOTA: Hay algunas excepciones a este método de extrapolación: cuando una secuencia parece comenzar o terminar en un período de muestreo definido, no queremos extrapolar demasiado en la dirección donde termina la secuencia. Las funciones rate() y aumentar() especulan que una secuencia comenzará o finalizará cuando la primera o última muestra esté más lejos del límite de la ventana respectiva que 1,1 veces el espaciado promedio de las muestras en la ventana. En este caso, la extrapolación se extiende sólo la mitad del intervalo muestral medio hacia el límite de la ventana, no todo. Además, dado que CONTADOR siempre comienza en 0 y nunca es negativo, la función evita la extrapolación a valores negativos. En cambio, la extrapolación ocurre sólo cuando se alcanza el valor esperado 0.
Dado que irate() solo analiza el crecimiento por segundo entre muestras, no se realiza tal extrapolación.
Aunque los contadores normalmente simplemente se acumulan, también se restablecen a 0 cuando se reinicia el proceso de seguimiento de los contadores. Para evitar interpretar estos reinicios como tasas negativas reales, las funciones relacionadas con el contador tienen lógica para detectar y manejar estos reinicios: por ejemplo, al iterar sobre muestras dentro de la ventana de tiempo proporcionada, la función verifica si hay un valor para cualquier muestra debajo del muestra anterior e interprete esto como un reinicio del contador. El contador siempre comienza en 0 después de un reinicio y luego, según esta suposición, estas funciones simplemente agregan el nuevo valor de muestra al valor de muestra visto anteriormente para compensar el reinicio.
La siguiente figura muestra cómo el cálculo rate() maneja los reinicios del contador que ocurren dentro de la ventana definida. Puede pensar en esto como rate() creando un conjunto de muestras "ficticias" a partir de las muestras "reales" subyacentes. Luego, la tasa final se calcula en función de las muestras virtuales, como si el reinicio nunca hubiera ocurrido.
Nota: Cuando se reinicia el contador, los datos pueden incrementarse después del último tirón de Prometheus y antes del reinicio. Prometheus perderá estos deltas para siempre y no podrá recuperarlos. Para minimizar este efecto, los restablecimientos deben ocurrir solo ocasionalmente y con menos frecuencia que la que Prometheus extrae de los datos de destino.
El funcionamiento interno y la salida de las diversas funciones relacionadas con los contadores en PromQL pueden resultar confusos. Este artículo tiene como objetivo aclarar cómo las funciones rate(), irate() y aumentar() manejan unidades, restablecimientos de contadores y extrapolación. Con suerte, esto le ayudará a comprender mejor sus matices.
Compartiremos más contenido contigo en el próximo artículo, así que estad atentos~
.