En este proyecto, vamos a crear un script en Bash que analizará archivos de registro (logs) para extraer información útil. Este tipo de herramienta es muy útil para administradores de sistemas y desarrolladores que necesitan monitorear y depurar aplicaciones.

Objetivos del Proyecto

  1. Leer y procesar archivos de registro.
  2. Filtrar y buscar patrones específicos en los registros.
  3. Generar un resumen de los datos extraídos.
  4. Crear un informe con los resultados.

Paso 1: Leer y Procesar Archivos de Registro

Explicación

Para comenzar, necesitamos un archivo de registro de ejemplo. Supongamos que tenemos un archivo llamado access.log que contiene registros de acceso a un servidor web.

Ejemplo de Archivo de Registro (access.log)

192.168.1.1 - - [10/Oct/2023:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1043
192.168.1.2 - - [10/Oct/2023:13:56:01 +0000] "POST /login HTTP/1.1" 200 2326
192.168.1.3 - - [10/Oct/2023:13:56:43 +0000] "GET /home HTTP/1.1" 404 512

Código para Leer el Archivo

#!/bin/bash

# Verificar si el archivo de registro existe
if [ ! -f access.log ]; then
    echo "El archivo access.log no existe."
    exit 1
fi

# Leer el archivo de registro línea por línea
while IFS= read -r line; do
    echo "$line"
done < access.log

Explicación del Código

  • Verificación del Archivo: Comprobamos si el archivo access.log existe.
  • Lectura del Archivo: Utilizamos un bucle while para leer el archivo línea por línea.

Paso 2: Filtrar y Buscar Patrones Específicos

Explicación

Vamos a buscar todas las solicitudes que resultaron en un error 404.

Código para Filtrar Errores 404

#!/bin/bash

# Verificar si el archivo de registro existe
if [ ! -f access.log ]; then
    echo "El archivo access.log no existe."
    exit 1
fi

# Filtrar y contar las líneas con errores 404
error_count=0
while IFS= read -r line; do
    if [[ "$line" == *" 404 "* ]]; then
        echo "$line"
        ((error_count++))
    fi
done < access.log

echo "Número total de errores 404: $error_count"

Explicación del Código

  • Filtrado de Errores 404: Utilizamos una condición if para buscar líneas que contienen " 404 ".
  • Contador de Errores: Incrementamos un contador cada vez que encontramos un error 404.

Paso 3: Generar un Resumen de los Datos Extraídos

Explicación

Vamos a generar un resumen que incluya el número total de solicitudes y el número de errores 404.

Código para Generar el Resumen

#!/bin/bash

# Verificar si el archivo de registro existe
if [ ! -f access.log ]; then
    echo "El archivo access.log no existe."
    exit 1
fi

# Inicializar contadores
total_requests=0
error_404_count=0

# Leer y procesar el archivo de registro
while IFS= read -r line; do
    ((total_requests++))
    if [[ "$line" == *" 404 "* ]]; then
        ((error_404_count++))
    fi
done < access.log

# Generar el resumen
echo "Resumen del Archivo de Registro:"
echo "--------------------------------"
echo "Total de Solicitudes: $total_requests"
echo "Errores 404: $error_404_count"

Explicación del Código

  • Contadores: Inicializamos contadores para el total de solicitudes y errores 404.
  • Procesamiento del Archivo: Incrementamos los contadores según corresponda.
  • Generación del Resumen: Imprimimos el resumen de los datos extraídos.

Paso 4: Crear un Informe con los Resultados

Explicación

Finalmente, vamos a guardar el resumen en un archivo de informe.

Código para Crear el Informe

#!/bin/bash

# Verificar si el archivo de registro existe
if [ ! -f access.log ]; then
    echo "El archivo access.log no existe."
    exit 1
fi

# Inicializar contadores
total_requests=0
error_404_count=0

# Leer y procesar el archivo de registro
while IFS= read -r line; do
    ((total_requests++))
    if [[ "$line" == *" 404 "* ]]; then
        ((error_404_count++))
    fi
done < access.log

# Generar el resumen
summary="Resumen del Archivo de Registro:\n"
summary+="--------------------------------\n"
summary+="Total de Solicitudes: $total_requests\n"
summary+="Errores 404: $error_404_count\n"

# Guardar el resumen en un archivo de informe
echo -e "$summary" > report.txt
echo "Informe generado en report.txt"

Explicación del Código

  • Generación del Resumen: Creamos una cadena con el resumen.
  • Guardar el Informe: Utilizamos echo -e para guardar el resumen en un archivo llamado report.txt.

Ejercicio Práctico

Tarea

  1. Modifica el script para que también cuente el número de solicitudes GET y POST.
  2. Incluye estos datos en el informe generado.

Solución

#!/bin/bash

# Verificar si el archivo de registro existe
if [ ! -f access.log ]; then
    echo "El archivo access.log no existe."
    exit 1
fi

# Inicializar contadores
total_requests=0
error_404_count=0
get_requests=0
post_requests=0

# Leer y procesar el archivo de registro
while IFS= read -r line; do
    ((total_requests++))
    if [[ "$line" == *" 404 "* ]]; then
        ((error_404_count++))
    fi
    if [[ "$line" == *"GET "* ]]; then
        ((get_requests++))
    elif [[ "$line" == *"POST "* ]]; then
        ((post_requests++))
    fi
done < access.log

# Generar el resumen
summary="Resumen del Archivo de Registro:\n"
summary+="--------------------------------\n"
summary+="Total de Solicitudes: $total_requests\n"
summary+="Errores 404: $error_404_count\n"
summary+="Solicitudes GET: $get_requests\n"
summary+="Solicitudes POST: $post_requests\n"

# Guardar el resumen en un archivo de informe
echo -e "$summary" > report.txt
echo "Informe generado en report.txt"

Explicación de la Solución

  • Contadores Adicionales: Añadimos contadores para solicitudes GET y POST.
  • Condiciones Adicionales: Incrementamos los contadores según el tipo de solicitud.
  • Resumen Ampliado: Incluimos los nuevos datos en el resumen.

Conclusión

En este proyecto, hemos aprendido a:

  • Leer y procesar archivos de registro en Bash.
  • Filtrar y buscar patrones específicos en los registros.
  • Generar un resumen de los datos extraídos.
  • Crear un informe con los resultados.

Estos conceptos son fundamentales para la administración de sistemas y la depuración de aplicaciones. ¡Felicidades por completar este proyecto! Ahora estás listo para abordar tareas más complejas en el análisis de registros.

© Copyright 2024. Todos los derechos reservados