En aquest projecte, crearem un script en Bash que analitzi fitxers de registre (logs) per extreure informació útil. Els fitxers de registre són essencials per monitoritzar el comportament del sistema, detectar errors i analitzar l'ús de recursos. Aquest projecte ens permetrà aplicar molts dels conceptes apresos en els mòduls anteriors.

Objectius del Projecte

  1. Llegir i processar fitxers de registre.
  2. Filtrar i cercar informació específica.
  3. Generar informes resum.
  4. Automatitzar l'anàlisi de registres.

Requisits Previs

Abans de començar, assegura't de tenir coneixements bàsics sobre:

  • Comandes bàsiques de Bash.
  • Manipulació de cadenes.
  • Redirecció i piping.
  • Expressions regulars.

Estructura del Projecte

  1. Lectura del Fitxer de Registre
  2. Filtratge de Dades
  3. Generació d'Informes
  4. Automatització

  1. Lectura del Fitxer de Registre

Exemple de Fitxer de Registre

Suposem que tenim un fitxer de registre anomenat system.log amb el següent contingut:

Jan 10 10:00:01 server1 CRON[12345]: (root) CMD (run-parts /etc/cron.daily)
Jan 10 10:05:43 server1 sshd[12346]: Failed password for invalid user admin from 192.168.1.100 port 22 ssh2
Jan 10 10:10:22 server1 sshd[12347]: Accepted password for user1 from 192.168.1.101 port 22 ssh2
Jan 10 10:15:01 server1 CRON[12348]: (root) CMD (run-parts /etc/cron.hourly)

Script per Llegir el Fitxer

#!/bin/bash

# Comprova si el fitxer de registre existeix
LOG_FILE="system.log"
if [[ ! -f "$LOG_FILE" ]]; then
    echo "El fitxer de registre $LOG_FILE no existeix."
    exit 1
fi

# Llegeix el fitxer de registre
while IFS= read -r line; do
    echo "$line"
done < "$LOG_FILE"

Explicació del Codi

  • LOG_FILE="system.log": Defineix el nom del fitxer de registre.
  • if [[ ! -f "$LOG_FILE" ]]; then ... fi: Comprova si el fitxer de registre existeix.
  • while IFS= read -r line; do ... done < "$LOG_FILE": Llegeix cada línia del fitxer de registre i la mostra per pantalla.

  1. Filtratge de Dades

Filtrar per Paraula Clau

Suposem que volem filtrar les línies que contenen la paraula "sshd".

#!/bin/bash

LOG_FILE="system.log"
if [[ ! -f "$LOG_FILE" ]]; then
    echo "El fitxer de registre $LOG_FILE no existeix."
    exit 1
fi

# Filtra les línies que contenen "sshd"
grep "sshd" "$LOG_FILE"

Explicació del Codi

  • grep "sshd" "$LOG_FILE": Utilitza grep per cercar i mostrar les línies que contenen la paraula "sshd".

  1. Generació d'Informes

Comptar Incidències de SSH

Podem comptar quantes vegades s'ha intentat accedir al sistema via SSH.

#!/bin/bash

LOG_FILE="system.log"
if [[ ! -f "$LOG_FILE" ]]; then
    echo "El fitxer de registre $LOG_FILE no existeix."
    exit 1
fi

# Comptar incidències de SSH
ssh_attempts=$(grep -c "sshd" "$LOG_FILE")
echo "Nombre d'intents d'accés via SSH: $ssh_attempts"

Explicació del Codi

  • ssh_attempts=$(grep -c "sshd" "$LOG_FILE"): Utilitza grep -c per comptar les línies que contenen "sshd" i emmagatzema el resultat a la variable ssh_attempts.
  • echo "Nombre d'intents d'accés via SSH: $ssh_attempts": Mostra el nombre d'intents d'accés via SSH.

  1. Automatització

Executar l'Anàlisi Automàticament

Podem programar l'execució de l'script per analitzar els registres de manera automàtica utilitzant cron.

Exemple de Crontab

# Edita el crontab amb la comanda `crontab -e` i afegeix la següent línia:
0 * * * * /path/to/your/script.sh >> /path/to/your/log_analysis_output.log 2>&1

Explicació del Crontab

  • 0 * * * *: Executa l'script cada hora.
  • /path/to/your/script.sh: Ruta completa a l'script.
  • >> /path/to/your/log_analysis_output.log 2>&1: Redirigeix la sortida de l'script a un fitxer de registre.

Exercici Pràctic

Descripció

Crea un script que:

  1. Llegeixi un fitxer de registre.
  2. Filtri les línies que contenen errors (paraula clau "error").
  3. Compti el nombre d'errors.
  4. Generi un informe amb el nombre d'errors i les línies que contenen errors.

Solució

#!/bin/bash

LOG_FILE="system.log"
if [[ ! -f "$LOG_FILE" ]]; then
    echo "El fitxer de registre $LOG_FILE no existeix."
    exit 1
fi

# Filtra les línies que contenen "error"
error_lines=$(grep -i "error" "$LOG_FILE")

# Comptar el nombre d'errors
error_count=$(echo "$error_lines" | wc -l)

# Generar l'informe
echo "Nombre d'errors: $error_count"
echo "Línies amb errors:"
echo "$error_lines"

Explicació del Codi

  • error_lines=$(grep -i "error" "$LOG_FILE"): Filtra les línies que contenen "error" (ignorant majúscules/minúscules) i les emmagatzema a la variable error_lines.
  • error_count=$(echo "$error_lines" | wc -l): Compta el nombre de línies que contenen errors.
  • echo "Nombre d'errors: $error_count": Mostra el nombre d'errors.
  • echo "Línies amb errors:": Mostra un missatge indicant que es llistaran les línies amb errors.
  • echo "$error_lines": Mostra les línies que contenen errors.

Conclusió

En aquest projecte, hem creat un analitzador de fitxers de registre en Bash que ens permet llegir, filtrar i generar informes sobre els registres del sistema. Hem après a utilitzar comandes bàsiques de Bash, expressions regulars i tècniques d'automatització per analitzar fitxers de registre de manera eficient. Aquest projecte ens prepara per a tasques més avançades d'automatització i monitorització del sistema.

© Copyright 2024. Tots els drets reservats