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...