¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Mide un servicio en marcha (Prometheus)

Después de esta lección: Puedo leer una métrica y decir qué me cuenta sobre un servicio.

Lección de 55 min6 comandosLaboratorio de observabilidad: Prometheus y Grafana, con una regla de alerta que escribir

La tienda va lenta los viernes

Una tienda en línea va lenta todos los viernes por la tarde. La dueña pregunta cuánto y desde cuándo. Nadie sabe contestar.

Si la tienda hubiera apuntado unos cuantos números cada pocos segundos, la respuesta sería una gráfica. Primero se mide. Después se arregla.

Al terminar esta lección

Nota

Puedo leer una métrica y decir qué me cuenta sobre un servicio.

Palabras clave

PalabraQué significaEjemplo
Métricaun número sobre un servicio, medido una y otra vez
Contadormétrica que solo subenginx_http_requests_total
Indicadormétrica que sube y bajanginx_connections_active
Tasalo rápido que crece un contador, por segundo
Percentilvalor que una parte de las medidas no superapercentil 90
Alertaaviso que se envía cuando una métrica parece mala

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un contador sube y un indicador oscila

Una métrica es un número que un servicio comparte sobre sí mismo. Un recolector llamado Prometheus pide los números cada cinco segundos y los guarda con la hora. En el laboratorio, un exporter lee la página de estado de nginx y le pasa esos números.

Un contador solo crece: las peticiones servidas desde el arranque. Un indicador se mueve en los dos sentidos: las conexiones abiertas ahora mismo.

El Prometheus del laboratorio responde por la web. El primer Run pregunta qué objetivos responden.

¿Qué objetivos responden?

Comando
curl -s -G -w "\n" http://prometheus:9090/api/v1/query --data-urlencode 'query=up'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pide un indicador

Comando
curl -s -G -w "\n" http://prometheus:9090/api/v1/query --data-urlencode 'query=nginx_connections_active'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pide un contador

Comando
curl -s -G -w "\n" http://prometheus:9090/api/v1/query --data-urlencode 'query=nginx_http_requests_total'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Una tasa convierte un contador en velocidad

Un contador que marca 130 dice poco. ¿Son 130 en un día o en un minuto?

La tasa es el crecimiento dividido entre los segundos. Si un contador pasó de 40 a 130 en 6 segundos, creció 90, así que la tasa es 90 entre 6.

Ejecuta el primer comando para mandar cincuenta visitas al servidor web. Después pregunta a Prometheus por la tasa del último minuto.

La tasa a mano

Código: python
antes = 40
despues = 130
segundos = 6
print((despues - antes) / segundos)
# Cambia segundos a 3. ¿El servicio está más ocupado o más tranquilo?

Manda cincuenta visitas

Comando
curl -s -o /dev/null "http://app:8080/?n=[1-50]"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pide la tasa por segundo

Comando
curl -s -G -w "\n" http://prometheus:9090/api/v1/query --data-urlencode 'query=rate(nginx_http_requests_total[1m])'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un percentil enseña a los pocos lentos

Diez clientes esperan 18, 20, 22, 24, 25, 25, 30, 33, 41 y 880 milisegundos. La media es 111,8. Ningún cliente esperó eso.

El percentil 90 es la espera que nueve de cada diez clientes no superan. Ordena los tiempos y toma el noveno: 41.

El servidor del laboratorio no publica tiempos, así que este caso se resuelve a mano.

Ejemplo resuelto: diez tiempos de espera

MedidaValorQué dice
Media111,8 msUn número que ningún cliente vivió
Mediana, el percentil 5025 msLa mitad esperó eso o menos
Percentil 9041 msNueve de cada diez esperaron eso o menos
El más lento880 msUn cliente esperó casi un segundo

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Los mismos números en código

Código: python
tiempos = [18, 20, 22, 24, 25, 25, 30, 33, 41, 880]
total = 0
for tiempo in tiempos:
    total = total + tiempo
print("media", total / len(tiempos))
print("mediana", tiempos[4])
print("percentil 90", tiempos[8])
# Cambia 880 por 45. ¿Qué número se mueve más?

Un error frecuente

Advertencia

Mucha gente cree que la media del tiempo de respuesta refleja lo que siente el usuario. Unas pocas peticiones muy lentas la suben, y muchas rápidas las esconden. Lee la mediana para el cliente habitual y un percentil alto para el que tiene mala suerte.

Una alerta es una regla sobre una métrica

Nadie puede mirar una gráfica todo el día. Una alerta es una regla que vigila una métrica por ti. Dice: "si esto sigue mal durante este tiempo, avisa a alguien".

El tiempo importa. Un pico de un segundo no debe despertar a nadie. Prometheus guarda sus reglas en una lista. Una copia nueva del laboratorio no tiene ninguna, así que el siguiente Run muestra una lista vacía.

Lista las reglas que conoce Prometheus

Comando
curl -s -w "\n" http://prometheus:9090/api/v1/rules

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Para ir más lejos

Manda trescientas visitas con curl -s -o /dev/null "http://app:8080/?n=[1-300]". Espera diez segundos y pide dos tasas: rate(nginx_http_requests_total[1m]) y rate(nginx_http_requests_total[5m]).

Pide las dos otra vez dos minutos después. Explica por qué una sube más y baja antes que la otra, y cuál usarías en una alerta.

Sobre este laboratorio y su código: Laboratorio de observabilidad: Prometheus y Grafana, con una regla de alerta que escribir

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.