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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Métrica | un número sobre un servicio, medido una y otra vez | |
| Contador | métrica que solo sube | nginx_http_requests_total |
| Indicador | métrica que sube y baja | nginx_connections_active |
| Tasa | lo rápido que crece un contador, por segundo | |
| Percentil | valor que una parte de las medidas no supera | percentil 90 |
| Alerta | aviso 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?
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
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
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
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
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
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
| Medida | Valor | Qué dice |
|---|---|---|
| Media | 111,8 ms | Un número que ningún cliente vivió |
| Mediana, el percentil 50 | 25 ms | La mitad esperó eso o menos |
| Percentil 90 | 41 ms | Nueve de cada diez esperaron eso o menos |
| El más lento | 880 ms | Un 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
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
curl -s -w "\n" http://prometheus:9090/api/v1/rulesSe 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.