0%
Prometheus e seu modelo de dados

Prometheus

Séries temporais, contadores e gauges, labels e a explosão de cardinalidade.

10-15 min

Prometheus e seu modelo de dados

Um Prometheus que funciona bem por seis meses pode se tornar inutilizável em um único dia, por causa de uma linha de código aparentemente inofensiva. Alguém adiciona um label user_id em um contador de requisições, para "poder filtrar por cliente". No dia seguinte, o uso de memória do servidor passou de 4 para 38 GiB, as consultas do painel principal expiram e o processo acaba sendo morto pelo kernel. Nenhum alerta é disparado, já que o sistema de alertas roda justamente no servidor que acabou de morrer.

Essa falha é a mais comum de todo o ecossistema e é totalmente previsível assim que se entende o que é uma série temporal para o Prometheus. Não é uma métrica nomeada que você filtra na leitura, como uma coluna em uma tabela SQL: cada combinação distinta de valores de labels cria uma série independente, com sua própria estrutura em memória e seu próprio arquivo em disco. Dez mil clientes multiplicados por cinco endpoints multiplicados por quatro códigos de status não são dez mil linhas de dados, são duzentas mil séries. Entender esse modelo antes de escrever a primeira métrica evitará que você precise reconstruir a instalação daqui a seis meses.

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!