Como o histograma do Prometheus funciona?

Uma tradução do artigo foi preparada antes do início do curso "Monitoramento e registro: Zabbix, Prometheus, ELK" .




Anteriormente, examinamos um contador , um medidor e um resumo . Agora vamos falar sobre como o histograma funciona no Prometheus.
O histograma tem algumas semelhanças com o resumo. Um histograma é uma combinação de vários contadores. Como métricas sumárias, histograma métricas são usados para rastrear indicadores dimensionais de eventos, muitas vezes a sua duração, usando o método observe. As ferramentas de cronometragem geralmente são iguais aos boletins. O que eles diferem é no processamento de quantis.

A seguir, é apresentado um exemplo de um formato de exposição marcado com Prometheus handler:

# 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

_sume eles _countfuncionam exatamente da mesma maneira que no resumo e podem ser usados ​​para obter o tempo médio de execução nos últimos cinco minutos:

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

No entanto, existem casos muito raros em que ele está _sumausente, por exemplo, em algumas métricas do exportador MySQLd.

Uma parte notável do histograma são as séries temporais _bucket, que na verdade são a parte do histograma da métrica. Mais especificamente, esses são contadores que formam um histograma cumulativo. ledenotar menor ou igual a. Assim, 26688 solicitações levaram menos que ou igual a 200ms, 27760 solicitações levaram menos que ou igual a 400ms e houve 28860 solicitações no total. Os valores no balde serão monotonicamente não decrescentes e o +Infbalde terá o maior valor. +Info balde deve estar sempre presente e corresponder ao valor _count.

Para calcular, digamos, um quantil de 0,9 (o percentil 90), você deve usar:

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

Uma grande vantagem dos histogramas sobre os resumos é que você pode agregar baldes antes de calcular o quantil - tomando cuidado para não perder o rótulo le:

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

Além da agregação, os histogramas são mais baratos para o cliente, pois os contadores são rapidamente incrementados. Então, por que não usar histogramas sempre? Há uma resposta longa, mas a versão resumida é que, com os histogramas, você deve primeiro selecionar seu bucket, e os custos são transferidos do cliente para o próprio Prometheus devido ao número de elementos do bucket. Por padrão, dez depósitos cobrem um serviço Web típico com um atraso que varia de milissegundos a um segundo e, em alguns casos, pode ser necessário alterar isso. Aqui, por exemplo, eles foram redefinidos para controlar melhor as consultas PromQL, que por padrão têm um tempo limite de dois minutos. Ter mais de uma dúzia de bucket-s fornecerá resultados mais precisos, mas também poderá produzir muitas séries temporais. Especialmente em combinação com outras tags.

Ao usar um sistema de monitoramento em tempo real como o Prometheus, o objetivo deve ser fornecer valor analítico suficiente para tomar decisões de engenharia com base nele. Por exemplo, saber que o atraso do percentil 90 aumentou 50 ms é mais importante do que saber se ele agora é 562 ms ou 563 ms e, normalmente, dez buckets são suficientes para isso. Se você precisar de uma resposta exata, sempre poderá calculá-la posteriormente em seus registros. Se houver muitos buckets, eles poderão ser descartados durante o processamento dos dados, conforme mostrado anteriormente . Em casos mais extremos, você pode ignorar completamente a série de se _bucketconfiar na média de _sume _count.

Em conclusão, os histogramas permitem o cálculo agregado de quantis, embora o número de elementos deva ser levado em consideração. Lembre-se de que um resumo sem quantis é uma opção mais barata se você não precisar de um histograma.



Mais sobre o curso



All Articles