Qué vas a hacer
Poner un programa en marcha es solo la mitad del trabajo. La otra mitad es enterarte de que algo falla antes de que te lo diga otra persona. La monitorización recoge números de un programa a lo largo del tiempo, y una alerta es una regla que vigila esos números y avisa. Tu laboratorio tiene un servidor web, un recolector llamado Prometheus y una herramienta para dibujar gráficas llamada Grafana. Vas a hacer una pregunta, escribir una regla de alerta, estropear el servidor a propósito y ver cómo salta la alerta.
Antes de empezar
Nota
Pulsa Iniciar el laboratorio en la barra superior de esta lección y espera hasta que diga que está en marcha. Los cuatro contenedores son app, exporter, prometheus y grafana, y se encuentran entre sí por esos nombres. Cada botón Ejecutar de más abajo escribe su comando en el terminal de tu laboratorio, uno detrás de otro y en la misma sesión. Para ver los comandos en directo, o para escribir los tuyos, pulsa Abrir el terminal (pestaña nueva) en la barra.
1. Hazle una pregunta a Prometheus
Prometheus guarda todos los números que ha recogido. En su lenguaje, PromQL, la pregunta más sencilla es el nombre de uno de ellos. nginx_up vale 1 mientras el servidor web responde y 0 cuando no responde. La respuesta es JSON: busca "value":[ seguido de una hora y de "1". Si escribes la misma pregunta en la página de Prometheus de tu navegador, la respuesta se dibuja como una tabla o una gráfica. -w "\n" termina la respuesta con un salto de línea, para que quede en su propia línea debajo del comando.
curl -s -w "\n" 'http://prometheus:9090/api/v1/query?query=nginx_up'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
2. Escribe una regla de alerta
Una regla dice: «cuando esta pregunta sea cierta durante diez segundos, lanza una alerta». Esta pregunta es nginx_up == 0, es decir, que el servidor está caído. El primer comando la escribe, en una sola línea, en la carpeta de reglas del contenedor de Prometheus, donde Prometheus lee todos los archivos .yml. No muestra nada. Después, el segundo comando le pide a Prometheus que vuelva a leer sus archivos, y tampoco muestra nada. En la página de Prometheus, Alerts (alertas) ya lista AppDown, en verde porque no pasa nada malo.
docker exec prometheus sh -c 'echo "$0" > /etc/prometheus/rules/lab.yml' '{"groups":[{"name":"lab","rules":[{"alert":"AppDown","expr":"nginx_up == 0","for":"10s","labels":{"severity":"page"}}]}]}'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
curl -s -X POST http://prometheus:9090/-/reloadSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
3. Estropea el servidor y mira cómo salta
docker stop app detiene el servidor web y muestra su nombre. Prometheus se da cuenta en unos diez segundos, y la alerta está en "state":"pending" (pendiente) mientras espera los diez segundos que pide la regla. Ejecuta el segundo comando dos veces, con unos segundos de diferencia: la respuesta cambia a "state":"firing" (activa). Después, docker start app arregla el servidor: pulsa una vez más el segundo botón Ejecutar pasados quince segundos y la respuesta vuelve a ser "alerts":[]. Para terminar, abre Grafana, pulsa Explore (explorar), elige el origen de datos Prometheus y ejecuta nginx_up: esa es la línea que dibuja un panel de un cuadro de mandos.
docker stop appSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
curl -s -w "\n" http://prometheus:9090/api/v1/alertsSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
docker start appSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para el profesorado
Consejo
Esta lección es un pequeño ejemplo de una lección practicada en un laboratorio: los pasos y los botones Ejecutar son la lección, y el laboratorio es la copia propia de cada alumno. El laboratorio tiene cuatro servicios y dos volúmenes con nombre, y aquí nada se corrige automáticamente: el alumno entrega la regla, una captura de pantalla de la alerta activa y un panel de Grafana, con una frase sobre lo que haría una persona de guardia. La regla está en un archivo del volumen de Prometheus, así que sigue ahí después de detener y volver a iniciar el laboratorio. Cópiela en su propio módulo y modifíquela, o cree una desde cero con el menú Laboratorio del constructor de lecciones.