Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

Filtrando arquivos e linhas de logs - Feito de uma forma diferente

Para o desenvolvimento desse grupo de atividades, eu decidi montar um script em Bash baseado no original, só que com algumas funcionalidades extras para tornar o código mais limpo e adicionar algumas outras funcionalidades para filtragem. Acredito que isso simule a experiência real de utilização do Bash.

Para novas funcionalidades:

  1. Transformar os comandos e grupos de comandos em funções
  2. Ocultar endereço IP
  3. Remover as linhas de aviso de exposição nos logs, já que filtrei esses dados.

Eu sei que, na prática, para administradores, essas linhas de endereço não precisariam ser filtradas, mas para fins de estudo, eu farei isso.

Segue o código em "bourne again shell" reestruturado:

Bash

#!/bin/bash
LOG_DIRECTORY="../log-app/logs"
echo "Verificando logs no diretório $LOG_DIRECTORY"
salvar-erros() {
        grep "ERROR:" $arquivo > "${arquivo}.filtrado"
}
salvar-dados-sensiveis() {
        grep "SENSITIVE_DATA:" $arquivo >> "${arquivo}.filtrado"
}
filtrar-dados-sensiveis() {
        sed -i 's/User password is .*/User password is REDACTED/g' "${arquivo}.filtrado"
        sed -i 's/User password reset request with token .*/User password reset request with token REDACTED/g' "${arquivo}.filtrado"
        sed -i 's/API key leaked: .*/API key leaked REDACTED/g' "${arquivo}.filtrado"
        sed -i 's/User credit card last four digits: .*/User credit card last four digits: REDACTED/g' "${arquivo}.filtrado"
        sed -i 's/User session initiated with token: .*/User session initiated with token: REDACTED/g' "${arquivo}.filtrado"
        sed -i 's/User IP .*/User IP REDACTED/g' "${arquivo}.filtrado"
        sed -i 's/Unauthorized access attempt from IP .*/Unauthorized access attempt from IP REDACTED/g' "${arquivo}.filtrado"
        sed -i '/SENSITIVE_DATA: Credit card information exposed in logs\./d' "${arquivo}.filtrado"
        sed -i '/SENSITIVE_DATA: Credit card information exposed\./d' "${arquivo}.filtrado"
}
find $LOG_DIRECTORY -name "*.log" -print0 | while IFS= read -r -d '' arquivo; do
        salvar-erros
        salvar-dados-sensiveis
        filtrar-dados-sensiveis
done

Falando um pouco sobre as mudanças realizadas, a declaração de funções é simples a ponto de eu até ter me impressionado quando pesquisava, mas funciona como em qualquer outra linguagem e, para chamar, é só escrever o seu nome.

Sobre a exclusão de linhas, eu tive que usar um outro modo do sed, que é com /d e definindo um delimitador \.. Esse delimitador seria basicamente o último caractere do texto pesquisado.

1 resposta
solução!

Olá, Diego. Tudo bem com você?

Obrigado por compartilhar sua solução e também por explicar o raciocínio por trás das alterações. A proposta de reestruturar o script em Bash utilizando funções aproxima bastante o exercício de um cenário encontrado no dia a dia, já que dividir responsabilidades facilita a manutenção e torna o código mais organizado. Além disso, a preocupação em ocultar dados sensíveis e remover informações de exposição dos logs demonstra atenção a boas práticas relacionadas ao tratamento de informações confidenciais, um aspecto muito relevante quando trabalhamos com processamento de logs.

A separação das funções salvar-erros, salvar-dados-sensiveis e filtrar-dados-sensiveis deixa a intenção de cada etapa bastante clara. O uso do find com -print0 e da leitura com read -d '' também é uma boa escolha, pois evita problemas com nomes de arquivos que contenham espaços. Como exemplo, caso futuramente fosse necessário adicionar um novo padrão de anonimização, bastaria incluir mais um comando sed na função responsável pela filtragem, mantendo o restante do script inalterado.

Pensando em evoluções futuras, que outras funcionalidades você considera interessantes para esse script, como geração de relatórios, parâmetros de linha de comando ou processamento paralelo de arquivos?

Parabéns pela iniciativa de expandir o exercício e compartilhar sua abordagem. Continue publicando suas soluções no fórum, pois elas enriquecem as discussões e podem servir de referência para outros estudantes. O fórum permanece à disposição para acompanhar sua evolução.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!