🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónExtraer campos de un registro
4 tareas · 45 min · Principiante
Hasta aquí los patrones servían para filtrar líneas. Ahora sirven para partirlas. El proxy de Curtiembres del Atrato escribe una línea por petición, con la hora, la persona, la dirección, el método, el dominio, la ruta, el estado y los bytes todos pegados, y el SIEM no los separó. Con un patrón puedes ponerle nombre a cada trozo —un grupo con nombre— y desde ahí sumar, contar o filtrar como con cualquier campo. Lo haces en SPL con rex y en KQL con extract, y miras lo que casi nadie mira: qué líneas el patrón no supo leer. Todo es lectura de registros ya escritos.
Objetivo de la sala
Hasta aquí los patrones servían para filtrar líneas. Ahora sirven para partirlas. El proxy de Curtiembres del Atrato escribe una línea por petición, con la hora, la persona, la dirección, el método, el dominio, la ruta, el estado y los bytes todos pegados, y el SIEM no los separó. Con un patrón puedes ponerle nombre a cada trozo —un grupo con nombre— y desde ahí sumar, contar o filtrar como con cualquier campo. Lo haces en SPL con rex y en KQL con extract, y miras lo que casi nadie mira: qué líneas el patrón no supo leer. Todo es lectura de registros ya escritos.Un grupo ( … ) guarda lo que casó dentro. Si lleva un nombre, (?<usuario>\S+), ese trozo se convierte en un campo con ese nombre. En SPL, el comando rex aplica un patrón al texto y crea un campo por cada grupo con nombre:
index=proxy | rex "^\S+ \S+ (?<usuario>\S+) (?<ip>\S+) "
Se lee de izquierda a derecha, igual que la línea: dos palabras que se ignoran (la hora y el equipo), una palabra que se guarda como usuario y otra que se guarda como ip. El patrón no sabe lo que es un usuario; solo cuenta palabras separadas por espacios, y por eso depende de que la línea siempre tenga esa forma.
Responde para continuar
En un patrón de rex, ¿qué hace exactamente `(?<ip>\S+)`?
Ver pista de ayuda
El nombre entre < y > solo etiqueta el trozo; lo que casa lo decide \S+.
Con los campos recién extraídos se pregunta lo de siempre. El patrón completo de una línea del proxy tiene nueve piezas; con él se suman los bytes de cada persona.
index=proxy | rex "^\S+ \S+ (?<usuario>\S+) (?<ip>\S+) (?<metodo>[A-Z]+) (?<dominio>\S+) (?<ruta>\S+) (?<estado>\d{3}) (?<bytes>\d+)$" | stats sum(bytes) as total by usuario | sort - total
\d{3} es el código de estado, tres dígitos, y [A-Z]+ es el método en mayúsculas. La persona que más bytes baja en total no tiene por qué ser la que hizo la descarga más grande: pesa la suma de todas sus peticiones.
Responde para continuar
Escribe el usuario que más bytes sumó en total en el proxy.
Ver pista de ayuda
Ejecuta la búsqueda de arriba y lee la primera fila. Después mira la tabla `index=proxy` y compara con quién hizo la petición más grande.
En KQL la pieza es extract(patrón, grupo, texto): devuelve lo que casó el grupo número grupo, contando los paréntesis de izquierda a derecha, o vacío si no casa. Se usa dentro de extend, que añade columnas. Delante del patrón va una @, que significa «cadena literal» y evita duplicar cada barra invertida.
proxy
| extend estado = toint(extract(@" (\d{3}) \d+$", 1, Raw)),
dominio = extract(@" (\S+\.example\S*) ", 1, Raw)
| where estado >= 400
| summarize veces = count() by dominio, estado
| sort by veces desc
Se queda con las peticiones que terminaron en error de cliente o de servidor y cuenta cuántas hubo por dominio y estado. No hace falta repasar las catorce líneas con la vista.
Responde para continuar
Escribe el dominio que respondió con el estado 403 más veces.
Ver pista de ayuda
Ejecuta `proxy | extend estado = toint(extract(@" (\d{3}) \d+$", 1, Raw)), dominio = extract(@" (\S+\.example\S*) ", 1, Raw) | where estado >= 400 | summarize veces = count() by dominio, estado | sort by veces desc` y lee la fila del 403.
Un patrón escrito para una forma de línea no avisa cuando aparece otra: el campo queda vacío y el análisis sigue sin esa línea. La suma de la tarea 2 no sabe cuánto tráfico quedó fuera. La forma de enterarse es preguntar por los vacíos, con where isnull(estado):
index=proxy | rex "<el mismo patrón>" | where isnull(estado) | table _raw
Un analista que construye una extracción siempre hace esa pregunta antes de confiar en una cifra. Si el patrón pierde líneas, hay que ampliarlo, y una vez ampliado hay que repetir la pregunta.
Responde para continuar
Escribe el método de las líneas del proxy que el patrón de nueve piezas no extrae.
Ver pista de ayuda
Ejecuta `index=proxy | rex "^\S+ \S+ (?<usuario>\S+) (?<ip>\S+) (?<metodo>[A-Z]+) (?<dominio>\S+) (?<ruta>\S+) (?<estado>\d{3}) (?<bytes>\d+)$" | where isnull(estado) | table _raw` y lee el método de las dos líneas.
Whoami-Labs Pro
Whoami-Labs Pro utiliza cookies
Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.