Los pagos fallan de madrugada
Los pagos con tarjeta de una tienda dejan de funcionar durante la noche. Nadie tocó nada. El dueño te llama a primera hora.
No adivinas. Abres el registro. Ahí está lo que hizo la máquina y cuándo.
Al final de esta lección
Nota
Puedo encontrar en un registro lo que salió mal.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Registro | un archivo donde un programa anota lo que hizo | |
| Línea de registro | una anotación: una hora, un origen y un mensaje | |
| Marca de tiempo | la fecha y la hora escritas en una línea | |
| Filtrar | quedarte solo con las líneas que importan | grep |
| Cronología | los sucesos de varios registros puestos en orden | |
| Prueba | una línea de registro que respalda lo que afirmas |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una línea de registro tiene partes
Las máquinas escriben los registros con un patrón fijo, para que una herramienta pueda leerlos. Aprende el patrón una vez y cada línea será fácil.
El registro de autenticación, auth.log, anota cada intento de entrar en la máquina. Cada línea da la fecha y la hora, la máquina, el programa y un mensaje. El mensaje contiene los hechos: quién lo intentó, desde dónde y si funcionó.
Las pruebas de este laboratorio
ls caseSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
¿Cuántas líneas tiene el registro de autenticación?
wc -l case/var/log/auth.logSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Las dos primeras líneas del registro web
head -n 2 case/var/log/nginx/access.logSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Las tres últimas líneas del registro web
tail -n 3 case/var/log/nginx/access.logSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejemplo: una línea del registro web
| Parte | Ejemplo | Significado |
|---|---|---|
| Dirección | 192.0.2.77 | Quién pidió |
| Hora | [14/Oct/2026:00:01:49 +0000] | Cuándo |
| Petición | "GET /login HTTP/1.1" | Qué pidió |
| Estado | 200 | La respuesta: 200 bien, 404 no encontrado, 403 prohibido |
| Tamaño | 2557 | Bytes devueltos |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Primero filtra, luego cuenta
grep se queda con las líneas que contienen unas palabras. grep -c las cuenta en vez de imprimirlas.
Para contar por columna, extrae la columna con awk, ordénala y deja que uniq -c cuente las rachas. Un segundo sort -rn pone primero el número mayor.
Cuenta las contraseñas fallidas
grep -c "Failed password" case/var/log/auth.logSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Cuenta los accesos aceptados
grep -c "Accepted" case/var/log/auth.logSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Cuenta el registro web por código de estado
awk '{print $9}' case/var/log/nginx/access.log | sort | uniq -cSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un extracto pequeño para leer
Nov 03 02:11:03 tienda01 sshd[2211]: Invalid user admin from 203.0.113.44 port 4410
Nov 03 02:11:03 tienda01 sshd[2211]: Failed password for invalid user admin from 203.0.113.44 port 4410 ssh2
Nov 03 02:11:09 tienda01 sshd[2214]: Failed password for root from 203.0.113.44 port 4418 ssh2
Nov 03 02:14:40 tienda01 sshd[2230]: Accepted password for lucia from 192.0.2.25 port 5120 ssh2
Ejemplo: contar por dirección
| Paso | Qué hace | Resultado en el extracto |
|---|---|---|
| 1 | Quédate con las líneas Failed password | 2 líneas |
| 2 | Extrae la dirección que sigue a "from" | 203.0.113.44 dos veces |
| 3 | Cuenta cada dirección | 203.0.113.44: 2 |
| 4 | Busca una línea Accepted de esa dirección | Ninguna: no llegó a entrar |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente cree que la dirección con más fallos es la que consiguió entrar. Los fallos y los aciertos son líneas distintas. Una dirección puede fallar mil veces y no acertar nunca. Busca siempre una línea de acceso aceptado y comprueba que viene de la dirección que sospechas.
Una cronología une los registros
Un registro casi nunca cuenta toda la historia. Pon los sucesos de varios registros en orden de tiempo. Luego busca qué ocurrió primero.
El primer suceso es el que más importa. Lo que viene después puede ser consecuencia suya.
Ejemplo: una cronología
| Hora | Origen | Suceso |
|---|---|---|
| 02:11 | Registro de autenticación | Muchas contraseñas fallidas desde una dirección |
| 02:14 | Registro de autenticación | Acceso aceptado de lucia desde otra dirección |
| 02:16 | Registro web | Petición de una página de administración, respondida con 200 |
| 02:30 | Registro de cron | Una tarea nueva se ejecuta por primera vez |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Sigue un registro y lee uno largo
Escribe tail -f y el nombre de un registro para ver llegar líneas nuevas. Pulsa Ctrl+C para parar. Un botón no puede pulsar Ctrl+C: escríbela tú.
Escribe less y el nombre de un registro para recorrer un archivo largo. Pulsa / y una palabra para buscar, y q para salir.
Para ir más lejos
En el registro web, la columna 7 es la página que se pidió. Construye una tubería que se quede con las líneas 404, extraiga la columna 7 y cuente cada página.
Ordénala para que la cuenta mayor salga primero y quédate con las tres primeras. Después di en una frase qué tipo de visitante pide páginas que no existen.