Tipos primitivos de métricas no Prometheus
Publicado em 11 fev 2020. Uns 3 minutos de leitura.
O Prometheus tem dois tipos primitivos e dois tipos complexos de métricas. Os tipos complexos reusam os tipos primitivos, usando múltiplas séries temporais para fazer o que parece ser apenas uma quando consultado com as funções de agregação específicas.
Vamos dar uma olhada nos dois tipos primitivos: contadores e medidas.
🧮 Contador (counter)
Um contador é um número que sempre aumenta (ou fica parado). Ele representa o número de vezes que alguma coisa aconteceu. Alguns exemplos:
- Número de visualizações do seu site
- Número de transações de cartão de crédito no seu sistema (você não pode desfazer uma transação -- você pode estorná-la, mas ela aconteceu e isto é imutável)
- Número de deploys da sua aplicação
Como você pode ver, um contador é algo que normalmente se pensa em termos de
número de vezes que x
aconteceu.
Agora, aplicações que exportam métricas para o Prometheus não persistem estas métricas entre reinícios, então o contador vai voltar para zero quando a aplicação tiver um deploy, travar ou qualquer outro evento que a reinicie. Então como contadores são úteis?
Um contador por si só é difícil de entender. É aí que a função rate
entra.
rate
recebe uma série temporal de um contador, um tamanho de janela em
unidades de tempo, e retorna uma série temporal de eventos por segundo
. A
função rate
e sua família sabem lidar com reinícios de contadores.
Por exemplo, se uma métrica de contador tinha o valor de 50
na última coleta,
e agora tem o valor 3
, a aplicação tem que ter reiniciado. A função rate
não
vai dar como resultado "eventos por segundo negativo" aqui. Ela vai, na verdade,
dizer que o contador aumentou em 3
unidades entre as coletas (de 50
para
53
). Isso quer dizer que você pode perder alguns dados se, por exemplo, entre
as coletas o contador foi para 52
e depois reiniciou. Mas isso é ok e o
Prometheus deve ser usado em situações em que essas perdas esporádicas pelos
reinícios não sejam um problema (a maior parte das situação de monitoramento
deve estar ok quanto a isso).
📈 Medida (gauge)
Antes de mais nada, eu não consegui pensar numa tradução melhor pra gauge. Outra tradução que pode ajudar (ou não é bitola). Enfim…
Uma medida é um número que pode subir, descer ou manter-se parado. Ela representa um retrato instantâneo de uma quantidade observável. Alguns exemplos:
- Quantidade atual de usuários online
- Quantidade atual de compras finalizadas com envio pendente (vai subir quando uma nova compra for criada e descer quando uma compra for enviada)
- Quantidade atual de CPU em utilização, percentual
Esses exemplos reforçam o fato que medidas normalmente significam uma quantidade atual de coisas, absoluta ou relativa.
Como é um retrato do estado atual, uma métrica de medida pode ser lida sozinha e deve fazer sentido. Você pode também traçá-la sobre o tempo para ver tendências. Se a aplicação reiniciar, ela vai começar a reportar o valor atual da métrica de novo quando iniciar, então você não precisa de um tratamento especial aqui.
O que vem depois?
Não só de contadores e gauges vive o Prometheus. Ok, podemos até dizer que sim. O Prometheus também tem dois tipos complexos de métricas: histogramas e sumários que são construidos como conjuntos desses de métricas desses dois tipos primitivos. Dá uma lida sobre no outro post!
Gostou? Que tal compartilhar?
Tags: prometheusmonitoring