¿Cómo funciona el histograma de Prometeo?

Se preparó una traducción del artículo antes del comienzo del curso "Monitoreo y registro: Zabbix, Prometheus, ELK" .




Anteriormente miramos un mostrador , un medidor y un resumen . Ahora hablemos sobre cómo funciona el histograma en Prometeo.
El histograma tiene algunas similitudes con el resumen. Un histograma es una combinación de varios contadores. Al igual que las métricas de resumen, las métricas de histograma se usan para rastrear indicadores dimensionales de eventos, a menudo su duración, utilizando el método observe. Las herramientas de cronometraje son generalmente las mismas que los boletines. En lo que difieren es en el procesamiento de cuantiles.

El siguiente es un ejemplo de un formato de etiqueta de Prometheus para la exposiciónhandler :

# HELP prometheus_http_request_duration_seconds Histogram of latencies for HTTP requests.
# TYPE prometheus_http_request_duration_seconds histogram
prometheus_http_request_duration_seconds_bucket{handler="/",le="0.1"} 25547
prometheus_http_request_duration_seconds_bucket{handler="/",le="0.2"} 26688
prometheus_http_request_duration_seconds_bucket{handler="/",le="0.4"} 27760
prometheus_http_request_duration_seconds_bucket{handler="/",le="1"} 28641
prometheus_http_request_duration_seconds_bucket{handler="/",le="3"} 28782
prometheus_http_request_duration_seconds_bucket{handler="/",le="8"} 28844
prometheus_http_request_duration_seconds_bucket{handler="/",le="20"} 28855
prometheus_http_request_duration_seconds_bucket{handler="/",le="60"} 28860
prometheus_http_request_duration_seconds_bucket{handler="/",le="120"} 28860
prometheus_http_request_duration_seconds_bucket{handler="/",le="+Inf"} 28860
prometheus_http_request_duration_seconds_sum{handler="/"} 1863.80491025699
prometheus_http_request_duration_seconds_count{handler="/"} 28860

_sumy _countfuncionan exactamente de la misma manera que para el resumen, y se pueden usar para obtener el tiempo de ejecución promedio en los últimos cinco minutos:

 rate(prometheus_http_request_duration_seconds_sum[5m]
/
  rate(prometheus_http_request_duration_seconds_count[5m])

Sin embargo, hay casos muy raros en los que está _sumausente, por ejemplo, en algunas métricas del exportador MySQLd.

Una parte notable del histograma son las series de tiempo _bucket, que en realidad son la parte del histograma de la métrica. Más específicamente, estos son contadores que forman un histograma acumulativo. ledenotar menos o igual a. Por lo tanto, 26688 solicitudes tomaron menos o igual a 200 ms, 27760 solicitudes tomaron menos o igual a 400 ms, y hubo 28860 solicitudes en total. Los valores en el depósito serán monotónicamente no decrecientes, y el +Infdepósito tendrá el mayor valor. +Infel depósito siempre debe estar presente y coincidir con el valor _count.

Para calcular, por ejemplo, un cuantil de 0.9 (el percentil 90), debe usar:

histogram_quantile(0.9, 
  rate(prometheus_http_request_duration_seconds_bucket[5m])
)

Una gran ventaja de los histogramas sobre los resúmenes es que puede agregar depósitos antes de calcular un cuantil, teniendo cuidado de no perder la etiqueta le:

histogram_quantile(0.9, 
  sum without (handler)(
    rate(prometheus_http_request_duration_seconds_bucket[5m])
  )
)

Además de la agregación, los histogramas son más baratos para el cliente, ya que los contadores se incrementan rápidamente. Entonces, ¿por qué no usar histogramas siempre? Hay una respuesta largapero la versión corta es que con los histogramas tienes que preseleccionar tu bucket, y los costos se mueven del cliente a Prometheus debido a la cantidad de elementos del bucket. Diez cubos de forma predeterminada cubren un servicio web típico con un retraso que varía de milisegundos a un segundo, y en algunos casos es posible que deba cambiar esto. Aquí, por ejemplo, se redefinieron para realizar un mejor seguimiento de las consultas de PromQL, que por defecto tienen un tiempo de espera de dos minutos. Tener más de una docena de cubos dará resultados más precisos, pero también puede producir muchas series de tiempo. Especialmente en combinación con otras etiquetas.

Cuando se utiliza un sistema de monitoreo en tiempo real como Prometheus, el objetivo debe ser proporcionar un valor analítico suficiente para tomar decisiones de ingeniería basadas en él. Por ejemplo, saber que la demora del percentil 90 ha aumentado en 50 ms es más importante que saber si ahora es 562 ms o 563 ms, y por lo general diez cubos son suficientes para esto. Si necesita una respuesta exacta, siempre puede calcularla más tarde a partir de sus registros. Si hay demasiados cubos, se pueden descartar durante el procesamiento de datos, como se mostró anteriormente . En casos más extremos, puede ignorar por completo la serie de _bucketsy confiar en el promedio de _sumy _count.

En conclusión, los histogramas permiten el cálculo agregado de cuantiles, aunque se debe tener en cuenta el número de elementos. Recuerde que un resumen sin cuantiles es una opción más barata si no necesita un histograma.



Más sobre el curso



All Articles