Prometheus
Series temporales, contadores y medidores, etiquetas, y la explosión de cardinalidad.
Prometheus y su modelo de datos
Un Prometheus que funciona bien durante seis meses puede volverse inutilizable en un solo día por una línea de código aparentemente inocua. Alguien añade una etiqueta user_id a un contador de peticiones, para «poder filtrar por cliente». Al día siguiente, la ocupación de memoria del servidor ha pasado de 4 a 38 GiB, las consultas del panel principal caducan y el proceso acaba siendo terminado por el kernel. Ninguna alerta se dispara, porque el sistema de alertas se ejecuta precisamente en el servidor que acaba de morir.
Esta caída es la más común de todo el ecosistema, y es totalmente predecible en cuanto se entiende qué es una serie temporal para Prometheus. No es una métrica con nombre que se filtra en la lectura, como una columna en una tabla SQL: cada combinación distinta de valores de etiquetas crea una serie independiente, con su propia estructura en memoria y su propio archivo en disco. Diez mil clientes multiplicados por cinco puntos de entrada multiplicados por cuatro códigos de estado no son diez mil filas de datos, son doscientas mil series. Comprender este modelo antes de escribir la primera métrica le evitará reconstruir la instalación dentro de seis meses.
Comentarios
Los comentarios funcionan con GitHub Discussions
Inicia sesión con GitHub para participar en la discusión