No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Logs

13/29
Recursos

Las expresiones regulares son muy 煤tiles para encontrar l铆neas espec铆ficas que nos dicen algo muy puntual dentro de los archivos de logs que pueden llegar a tener millones de l铆neas.

Aportes 74

Preguntas 7

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Es gracioso ver como el instructor tiene tanta informaci贸n en la cabeza por decir y trata de ser o hablar de la manera mas simplificada posible sin dejar de un lado todo su conocimiento o su af谩n de ser literal y muy correcto con sus palabras. 馃槄馃懆鈥嶐煉火煠封嶁檪锔

Un incre铆ble esfuerzo por dar un excelente curso ya no es una informaci贸n tan simple de transmitir efectivamente.

[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [WARN] The system may be down
[LOG ENTRY] [WARN] Microsoft just bought Github
[LOG DATA] [LOG] Everything is OK
[LOG ENTRY] [LOG] [user:@beco] Logged in
[LOG ENTRY] [LOG] [user:@beco] Clicked here
[LOG DATA] [LOG] [user:@celismx] Did something
[LOG ENTRY] [LOG] [user:@beco] Rated the app
[LOG ENTRY] [LOG] [user:@beco] Logged out
[LOG LINE] [LOG] [user:@celismx] Logged in

Mis expresiones regulares 煤tiles en logs:

Para buscar direcciones IP:

(\d{1,3}\.){3,3}(\d{1,3})

Para buscar l铆neas sobre m茅todos HTTP:

^.*((GET)|(POST)|(PUT)|(DELETE)).*$

Para buscar l铆neas con fechas en el formato d铆a(numero)/mes(nombre)/a帽o(numero):

^.*(\d{1,2}\/\w+\/\d{4,4}).*$

En este enlace pueden generar su data, por si no tienen a la mano.

https://www.generatedata.com

Prob茅 usando grep en la terminal desde la carpeta de logs de npm:

Descripci贸n de la clase por Beco:

Las expresiones regulares son muy 煤tiles para encontrar l铆neas espec铆ficas que nos dicen algo muy puntual dentro de los archivos de logs que pueden llegar a tener millones de l铆neas.

[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [WARN] The system may be down
[LOG ENTRY] [LOG] Everything is OK
[LOG ENTRY] [LOG] [user:@beco] Logged in
[LOG ENTRY] [LOG] [user:@beco] Clicked here
[LOG ENTRY] [LOG] [user:@oscar] Rated the app
[LOG ENTRY] [LOG] [user:@beco] Logged out
[LOG ENTRY] [LOG] [user:@Lis] Logged out
Si quiero encongrar en el log la advertencia utilizar茅:

\[LOG.*\[WARN.*

-> Primero se escapa el corchete ya que es un car谩cter reservado, luego se escribe lo que se desea encontrar, con el simple [log.* se selecciona toda la l铆nea, ahora se vuelve a escapar el corchete y se termina de seleccionar el warn y el resto de la l铆nea con el 鈥.*鈥.
Si de los logs anteriores quiero encontrar solo los usuarios utilizar茅:

^\[log.*\[user.*$

Si quiero encontrar la informaci贸n de 1 usuario utilizar茅:

\[log.*\[user:@oscar.*$

Lo que dice Alberto es muy cierto, quiz谩s el control + F de toda la vida te pueda sacar de un apuro r谩pido. Sin embargo, para buscar de verdad en logs gigantes (como he tenido que hacer) las expresiones regulares ayudan bastante. Antes de este curso las buscaba en internet, ahora ya puedo hacerlas yo mismo y eso me da muchas ventajas. 隆A seguir aprendiendo amigos!

En este ejemplo: https://www.acunetix.com/blog/articles/using-logs-to-investigate-a-web-application-attack/

Buscar l铆neas con el comando POST y que contengan la palabra admin

"POST.*admin.*

Colecci贸n de logs del diferentes sistemas:

https://github.com/logpai/loghub

tan 鈥渟encillo鈥 y a la vez tan 煤til y poderoso.

Les comparto una lista de los caracteres reservados en expresiones regulares.

S铆mbolo Descripci贸n
[ ] Especificaci贸n de rango. (p.e. [a-z] representa una letra en el rango de la a a la z
\w Letra o d铆gito o gui贸n bajo; es lo mismo que [0-9A-Za-z_]
\W negaci贸n de \w
\s Espacio, es lo mismo que [ \t\n\r\f]
\S Negaci贸n de \s
\d D铆gito; es lo mismo que [0-9]
\D Negaci贸n de \d
\b Backspace (0x08) (s贸lo si aparece en una especificaci贸n de rango)
\b L铆mite de palabra (s贸lo si no aparece en una especificaci贸n de rango)
\B No l铆mite de palabra
* Cero o m谩s repeticiones de lo que precede
+ Una o m谩s repeticiones de lo que precede
[m,n] Al menos m y como m谩ximo n de lo que precede
? Al menos una repetici贸n o ninguna de lo que precede; es lo mismo que [0,1]
| Puede coincidir con lo que precede o con lo que sigue
( ) Agrupamiento

Buenas [email protected],
si est谩is usando Linux pod茅is abrir el archivo /var/log/auth.log donde os mostrar谩 diversas operaciones y as铆 pod茅is buscar informaci贸n relevante, en mi caso busque los 煤ltimos comandos que hice usando sudo.

Qu茅 hermoso es porder Seleccionar solo lo que quiero

__

import re

fh = open(r"C:\Users\Alfonso Zapata\jupyter\Cursos\Junio 2022\Curso de expresiones regulares - platzi\REGEX-master\liners.txt", "r").read()

fh

line = re.findall('\[LOG.*\[ERROR\].*', fh) 
print(line)

interesante y util

Parece complejo pero no lo es, hay que prestar mucha atenci贸n y ser cuidadoso al elegir lo que filtrar谩.

Hice estas instrucciones de RegEx que seleccionan cualquier log (como los vistos en clase) 馃槈

(\[\w+(\W+)?(\w+)?\]\s){1,}(\w+\s){1,}

Hola! Aqui quise hacer una expresion que solo me hiciera match con los LOGS que tuvieran como minimo dos corchetes con informacion dentro, pero que obligatoriamente luego de los corchetes y para terminar la linea tengan informacion en texto.

Obtenemos todos los corchetes con alg煤n contenido interno.

[.+?]

Es increible la forma de utilizar los logs en expresiones regulares y su capacidad de usarlos.

Con este programa de Java es posible filtrar los logs de un archivo gigante usando Streams e imprimiendo en pantalla las lineas que hagan match con la regex indicada:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.regex.Pattern;
import java.util.stream.Stream;

public class LogsExample {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("regex");
        Path filePath = Paths.get("filePath");
        try (Stream<String> stream = Files.lines(filePath)) {
            stream.filter(line -> pattern.matcher(line).find()).
                    forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

/\[LOG.*\[WARN\].*/g
/\[LOG.*\[LOG\].*/g
/\[LOG.*\[LOG\].*user:@celismx] .*/g

[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [WARN] The system may be down
[LOG ENTRY] [WARN] Microsoft just bought Github
[LOG DATA] [LOG] Everything is OK
[LOG ENTRY] [LOG] [user:@beco] Logged in
[LOG ENTRY] [LOG] [user:@beco] Clicked here
[LOG DATA] [LOG] [user:@celismx] Did something
[LOG ENTRY] [LOG] [user:@beco] Rated the app
[LOG ENTRY] [LOG] [user:@beco] Logged out
[LOG LINE] [LOG] [user:@celismx] Logged in

Con esta tambi茅n pude encontrar las fechas de los logs en formato dias/mes/anio

\d{2,2}\/\w{3}\/\d{4,4}

Use esta Regex para encontrar direcciones IP en un archivo de logs

((\d{2,3}\.+\d{2,3}\.?))

Ejemplo

Tomando un archivo log de Apache que contiene la estampa de tiempo en el inicio de cada l铆nea, es posible buscar los errores y filtrar a煤n m谩s por los estados:

^.*\[error\].*state 7$

Para encontrar una fecha en forma dd-mm-aaaa

^(?:3[01]|[12][0-9]|0?[1-9])([\-/.])(0?[1-9]|1[1-2])\1\d{4}$

Esta solo encuentra la fecha

si lo que necesitamos es la linea donde esta la fecha

agregamos al inicio y fin .*

^.*(?:3[01]|[12][0-9]|0?[1-9])([\-/.])(0?[1-9]|1[1-2])\1\d{4}.*$

Ejemplos:
31.12.3013
01/01/2013
5-3-2013
15.03.2013

para encontrar la etiqueta [error]

^.*\[error\].*$

Y de esta otra forma todas las lineas que contengas direcciones IP

^.*[0-9]+(?:\.[0-9]+){3}.*$

De esta forma encontramos solo las direcciones IP

[0-9]+(?:\.[0-9]+){3}

[LOG ENTRY] [WARN] Microsoft just bought Github
馃槅

revisi贸n de un fichero de apache
https://regexr.com/6ahj6

obtener

  • ip o url
  • fecha hora y puerto
  • texto (verbo + url + protocolo)
  • codigo de salida 200, 404, 鈥
  • total de bytes

expression

(([\d.]{7,16})|([\w\.]+)) - - (\[.+?\]) "(.+?)" (\d{3}) (\d+)

extracto de Traza

64.242.88.10 - - [07/Mar/2004:16:05:49 -0800] "GET /twiki/bin/edit/Main/Double_bounce_sender?topicparent=Main.ConfigurationVariables HTTP/1.1" 401 12846
lj1036.inktomisearch.com - - [07/Mar/2004:17:18:36 -0800] "GET /robots.txt HTTP/1.0" 200 68
64.242.88.10 - - [07/Mar/2004:16:10:02 -0800] "GET /mailman/listinfo/hsdivision HTTP/1.1" 200 6291
64.242.88.10 - - [07/Mar/2004:16:11:58 -0800] "GET /twiki/bin/view/TWiki/WikiSyntax HTTP/1.1" 200 7352
64.242.88.10 - - [07/Mar/2004:16:20:55 -0800] "GET /twiki/bin/view/Main/DCCAndPostFix HTTP/1.1" 200 5253

Detalle linea 1

64.242.88.10 - - [07/Mar/2004:16:05:49 -0800] "GET /twiki/bin/edit/Main/Double_bounce_sender?topicparent=Main.ConfigurationVariables HTTP/1.1" 401 12846
64.242.88.10
64.242.88.10
<empty>
[07/Mar/2004:16:05:49 -0800]
GET /twiki/bin/edit/Main/Double_bounce_sender?topicparent=Main.ConfigurationVariables HTTP/1.1
401
12846

Detalle linea 2

lj1036.inktomisearch.com - - [07/Mar/2004:17:18:36 -0800] "GET /robots.txt HTTP/1.0" 200 68
lj1036.inktomisearch.com
<empty>
lj1036.inktomisearch.com
[07/Mar/2004:17:18:36 -0800]
GET /robots.txt HTTP/1.0
200
68

regexr.com/6ahib

expression

^(\d{2}:?){3}\.\d{3} \[(.+)\] (DEBUG|WARN) (\w+\.?){5} - (.*)$

Texto

16:59:22.057 [main] DEBUG com.chuidiang.ejemplos.logback.LogBackBasicExample - Hello world.
16:59:22.062 [main] WARN com.chuidiang.ejemplos.logback.LogBackBasicExample - Hello world.!!

Descomposici贸n en 5 grupos

  • minutos
  • contenido del corcherte [ ]
  • tipo de mensaje si es DEBUG o WARN
  • nombre de la clase
  • texto

Detalle linea 1

16:59:22.057 [main] DEBUG com.chuidiang.ejemplos.logback.LogBackBasicExample - Hello world.
22
main
DEBUG
LogBackBasicExample
Hello world.

Detalle linea 2

16:59:22.062 [main] WARN com.chuidiang.ejemplos.logback.LogBackBasicExample - Hello world.!!
22
main
WARN
LogBackBasicExample
Hello world.!!

Una muy sencilla, todas las peticiones GET que envien el parametro REV 1.N

^.*"GET.*rev=1.[1-9]+

Ciertamente trabajar con Logs es uno de los ejemplos m谩s utilizados, por ejemplo, lo utilizo para parsear or铆genes de Logs que no tengan integraci贸n nativa en el SIEM (IBM QRadar) para poder extraer los campos que queremos tener de ese origen de datos.

Probe unsando grep en los logs de pacman para ver todos los paquetes que se han instalado:

 grep -E installed' '\w+ pacman.log

![](

Us茅 esta expresi贸n regular para buscar direcciones IP

(\d{1,3}\.){3,3}(\d{2,2}){1,1}
\]\s?\"GET

------------------------------------------------------------
64.242.88.10 - - [07/Mar/2004:16:10:02 -0800] "GET /mailman/listinfo/hsdivision HTTP/1.1" 200 6291
64.242.88.10 - - [07/Mar/2004:16:11:58 -0800] "GET /twiki/bin/view/TWiki/WikiSyntax HTTP/1.1" 200 7352
64.242.88.10 - - [07/Mar/2004:16:20:55 -0800] "GET 

11. Mis apuntes sobre: 鈥淟ogs鈥

  • 1. Ejemplo regex: Aplicando negaci贸n para buscar logs exactos
^\[LOG.*\[WARN.*\].*$

-Explicaci贸n 1: Encuentra y selecciona [match] que sea exactamente una l铆nea que inicie con
[LOG luego tenga 0 o m谩s caracteres, luego [WARN luego 0 o m谩s caracteres, luego ], luego
0 o m谩s caracteres.

  • 2. Ejemplo regex: Aplicando negaci贸n para buscar logs exactos
^\[LOG.*\[LOG\].*user:@celismx\].*$

-Explicaci贸n 2: Encuentra y selecciona [match] que sea exactamente una l铆nea que inicie con
[LOG luego tenga 0 o m谩s caracteres, luego [LOG] luego 0 o m谩s caracteres, luego user:@celismx],
luego 0 o m谩s caracteres.

  • 3. Ejemplo regex: Aplicando negaci贸n para buscar logs exactos
^\[LOG.*\[LOG\].*user:@\w+?\] .*$

-Explicaci贸n 3: Encuentra y selecciona [match] que sea exactamente una l铆nea que inicie con
[LOG luego tenga 0 o m谩s caracteres, luego [LOG] luego 0 o m谩s caracteres, luego user:@,
luego 0 o m谩s palabras (words), luego ]. luego un espacio en blanco, luego 0 o m谩s caracteres.

El filtrado de logs para encontrar puntualmente la informaci贸n de determinados eventos.

Cada vez me gusta mas este curso

.*WARN.*
.*LOG.*celismx.*
.*LOG.*user.*

Muy interesante!

excelente clase

Buscar los registros de LOG:

^\[LOG.*(.*LOG.*).*$

^\d{2,3}.\d{2,3}.\d{2,3}.\d{2,3}."POST.$

mi c贸digo

^\[LOG.*\[LOG\].*user:@\w+?\] .*$

Logs

[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [WARN] The system may be down
[LOG ENTRY] [LOG] Everything is OK
[LOG ENTRY] [LOG] [user:@beco] Logged in
[LOG ENTRY] [LOG] [user:@beco] Clicked here
[LOG ENTRY] [LOG] [user:@celismx] Rated the app
[LOG ENTRY] [LOG] [user:@beco] Logged out
[LOG ENTRY] [LOG] [user:@celismx] Rated the app
[LOG ENTRY] [LOG] [user:@celismx] Logged out

mi expresion para traer ip con xxx.xxx.x.xxx

^(\d{1,3}[.\d]){4,4}$

^[LOG.ERROR].$

[LOG ENTRY] [ERROR] The system is unstable
[LOG ENTRY] [WARN] The system may be down
[LOG ENTRY] [WARN] Microsoft just bought Github

Corriendo como demonios鈥 ja ja ja鈥

Excelente.

muy buena clase excelente conocer toda la potencia que puede llegar a tener una expresi贸n regular a comparacion de un simple ctrl + f XD

Sublime tiene esa funci贸n as铆 que es otra opci贸n 馃槈

Buenas noches

En esta expression no tengo claro que funcion tienen los backslash antes de los corchetes:
^[LOG.*[WARN*].user:@celismx**] .*$
Alguien puede darme un manito con la ecplicacion ?

excelente!

super

//buscamos todo lo que inicie con log y le siga un log con cualquier usuario

[LOG ENTRY] [ERROR] The system is unstable //no hace match
[LOG ENTRY] [WARN] The system may be down //no hace match
[LOG ENTRY] [LOG] Everything is
[LOG ENTRY] [LOG] [user:@beco] Logged in
[LOG ENTRY] [LOG] [user:@beco] Clicked here
[LOG ENTRY] [LOG] [user:@beco] Rated the app
[LOG ENTRY] [LOG] [user:@beco] Logged out

^\[LOG.*\[LOG\].*user:@\w+?\] .*$

^[LOG.*[LOG.beco.$

No encontr茅 archivos log pero s铆 encontr茅 el log del repositorio del curso de Git.

Muchas gracias por la explicaci贸n de esta utilidad instructor Alberto. Respecto al reto esta fue la 煤ltima l铆nea de uno de los proyectos que ten铆a:

sourceId=datosOrganismos:msgp[severity=(ERROR 2), summary=(No se pudo realizar conexi贸n con el GeoCodificador, verifique...), detail=(No se pudo realizar conexi贸n con el GeoCodificador, verifique...)]

Esta fue la expresi贸n regular que use para filtrarla de todas las demas:

^\w*.+\[.+\(ERROR.*\).*

Como podr铆a hacer para buscar con regex un archivo de log con la fecha mas actual y la hora ? el sistema de donde descargo archivos los guarda por d铆as y por horas ?

Recuerdo que una vez vi que la particion del disco duro en la que estaba la carpeta raiz de linux, estaba al tope , solo le habia dado como 35GB y de alguna forma llegu茅 que en la carpeta que contiene los Logs hab铆an dos archivos con 8GB de peso cada una, cuando quise abrirlos con un editor, este se qued贸 colgado. Luego pude leerlo con tail en la consola, aun soy novato en linux, pero descubr铆 leyendo esas ultimas lineas del log que la particion donde estaba linux estaba llena justamente por esos dos logs y me generaba un problema ya que no podia pasar de la ventana del login a pesar de pasar bien mis credenciales.

Warning!: Microsoft just bought Github

jajajaj

Basta de editores de texto, lo cool es usar la consola en Linux

El c贸digo en grep (consola en linux) para buscar todos los Logged In/Out

grep -E -nio '^.+\[LOG.+\].+Log.+' logs.txt

El contenido del archivo que uso el profe esta en los links en las primeras clases, pero de cualquier manera les dejo un poco de material para que practiquen:

1:[LOG ENTRY] [ERROR] The system is unstable
2:[LOG ENTRY] [WARN] The system may be down
3:[LOG ENTRY] [WARN] Microsoft just bought Github
4:[LOG DATA] [LOG] Everything is OK
5:[LOG ENTRY] [LOG] [user:@irving] Logged in
6:[LOG ENTRY]  [LOG] [user:@irving] Clicked here
7:[LOG DATA]  [LOG] [user:@celismx] Did something
8:[LOG ENTRY]  [LOG] [user:@irving] Rated the app
9:[LOG ENTRY]  [LOG] [user:@irving] Logged out
10:[LOG LINE]  [LOG] [user:@celismx] Logged in

Excelente clase!!!

Para los que no saben que es log b谩sicamente y resumidamente es un archivo que registra eventos e informaci贸n que ocurren en un sistema operativo o otro tipo de software similar.

驴Qu茅 hicimos?

  • ^ Recuerda que este s铆mbolo es para indicar una nueva l铆nea
  • [ Recuerda que el corchete se puede usar para crear clases por lo que se debe de indicar va a ser parte de nuestra b煤squeda y no para crear una clase por lo que se usa el car谩cter 鈥溾
  • .* Aqu铆 decimos que encuentre lo que sea
  • $ fin de l铆nea

    ^[LOG.[WARNING].$
    ^[LOG.[ERROR].$
    Por lo que le decimos a nuestro buscador mis indicaciones deben de hacer match en una sola l铆nea deben de empezar con [LOG despu茅s puede haber cualquier cosas pero debe de seguirle un [WARNING] o [ERROR] (dependiendo el caso) y puede haber o no m谩s cosas despu茅s

    ^[LOG.*[ERROR].user:@celismx] .$

^[LOG.*[ERROR].user:@\w+] .$\

Mis instrucciones debe de hacer match en una l铆nea, debe empezar con un [LOG puede seguir lo que sea pero debe de haber un [ERROR] despu茅s puede haber m谩s cosas pero debe de aparecer un user:@ cualquier cosas ] y puede haber o no m谩s cosas

Mi expresi贸n para encontrar todos los logs de Mon Mar 8 en el transcurso de las 3 de la tarde

^\[Mon Mar 8 03:..*$```