Fiz uma pequena refatoração no script monitoramento-logs.sh:
- Evitei o uso excessivo de sed -i (cada execução cria um novo processo).
- Reduzi a duplicação de date +%F.
- Utilizei awk para reduzir múltiplos grep + sed.
- Criei variáveis temporárias em vez de muitos arquivos intermediários.
- Minimizei I/O em disco (um dos maiores gargalos).
#!/bin/bash
# Diretórios
LOG_DIR="../myapp/logs"
ARQUIVO_DIR="../myapp/logs-processados"
TEMP_DIR="../myapp/logs-temp"
# Criação dos diretórios
mkdir -p "$ARQUIVO_DIR" "$TEMP_DIR"
# Data de hoje
HOJE=$(date +%F)
LOG_STATS="${ARQUIVO_DIR}/log_stats_${HOJE}.txt"
LOG_COMBINADOS="${ARQUIVO_DIR}/logs_combinados_${HOJE}.log"
# Processamento de arquivos .log
find "$LOG_DIR" -name "*.log" -print0 | while IFS= read -r -d '' arquivo; do
    nome_arquivo=$(basename "$arquivo")
    filtrado=$(mktemp)
    # Filtra linhas com ERROR ou SENSITIVE_DATA e faz substituições inline com awk
    awk '
        /ERROR|SENSITIVE_DATA/ {
            gsub(/User password is .*/, "User password is REDACTED");
            gsub(/User password reset request with token .*/, "User password reset request with token REDACTED");
            gsub(/API key leaked: .*/, "API key leaked: REDACTED");
            gsub(/User credit card last four digits: .*/, "User credit card last four digits: REDACTED");
            gsub(/User session initiated with token: .*/, "User session initiated with token: REDACTED");
            print;
        }
    ' "$arquivo" | sort | uniq > "$filtrado"
    num_palavras=$(wc -w < "$filtrado")
    num_linhas=$(wc -l < "$filtrado")
    {
        echo "Arquivo: $nome_arquivo"
        echo "Número de linhas: $num_linhas"
        echo "Número de palavras: $num_palavras"
        echo "--------------------------"
    } >> "$LOG_STATS"
    # Adiciona prefixo dependendo do tipo
    if [[ "$nome_arquivo" == *frontend* ]]; then
        sed 's/^/[FRONTEND] /' "$filtrado" >> "$LOG_COMBINADOS"
    elif [[ "$nome_arquivo" == *backend* ]]; then
        sed 's/^/[BACKEND] /' "$filtrado" >> "$LOG_COMBINADOS"
    else
        cat "$filtrado" >> "$LOG_COMBINADOS"
    fi
    rm "$filtrado"
done
# Ordena o log combinado por segunda coluna (assumindo formato que permita isso)
sort -k2 "$LOG_COMBINADOS" -o "$LOG_COMBINADOS"
# Move arquivos para o diretório temporário
mv "$LOG_COMBINADOS" "$TEMP_DIR/"
mv "$LOG_STATS" "$TEMP_DIR/"
# Compacta
tar -czf "${ARQUIVO_DIR}/logs_${HOJE}.tar.gz" -C "$TEMP_DIR" .
# Limpa
rm -r "$TEMP_DIR"
Melhorias:
- Substituições de dados feitas em um único awk, sem múltiplos sed.
- Menos arquivos intermediários (.filtrado, .unico).
- Variáveis reutilizadas (como HOJE).
- Evitar reprocessamentos ou comandos redundantes
continua...
 
             
             Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!
   Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!