1
resposta

Usando expressões para mais de um arquivo de log

Boa tarde, e se no caso eu precisar análisar mais um arquivo de log do apache? Existe a possibilidade de eu montar uma expressão regular e trazer o arquivo de log como parâmetro que eu quero analisar? Por exemplo: ./filtra-resultado-apache.sh apache-error_03-10-2022.log

Estou tentando montar alguma coisa aqui desse tipo, mas não estou conseguindo trazer o arquivo de log como parâmentro do meu script.

Expressão regular:

regexlog="\b[0-9a-zA-Z-.]*.log*[0-9-]{11}\b

if [[ $1 =~ $regexlog ]]
then
    cat $regexlog
else
    echo "O arquivo de log especificado é inválido."
fi

Estou quebrando a cabeça com isso, mas queria uma solução, pois pretendo facilitar o uso dos arquivos de log aqui da empresa. Gostaria de poder chamar o script trazendo como primeiro parâmentro o arquivo de log que eu quero analisar, e trazer como segundo parâmentro o Endereço de IP ou mensagem de erro ou a data do erro para as análises se tornarem mais rápida e dinâmica.

at.te

Fabiano Santos

1 resposta

Olá Fabiano, tudo bem com você?

Peço desculpas pela demora em obter um retorno.

Uma possibilidade para esse caso que você relatou é modificar o seu script para receber os parâmetros passados na linha de comando. Por exemplo, você pode utilizar a variável especial $1 para acessar o primeiro parâmetro passado para o script. Ou seja, se executarmos: ./filtra-resultado-apache.sh apache-error_03-10-2022.log, o valor de $1 será apache-error_03-10-2022.log.

Além disso, podemos utilizar o comando grep para filtrar o endereço de IP desejado, que também pode ser passado por meio de parâmetros.

Exemplo em código:

#!/bin/bash

regexlog="\b[0-9a-zA-Z-.].log[0-9-]{11}\b"

if [[ $1 =~ $regexlog ]]
then
    cat $1 | grep "Endereço de IP ou mensagem de erro ou data do erro"
else
    echo "O arquivo de log especificado é inválido."
fi

No lugar de "Endereço de IP ou mensagem de erro ou data do erro", você pode substituir pela expressão que você deseja utilizar para filtrar o arquivo de log. Por exemplo, se você quiser filtrar pelo endereço IP 192.168.1.10, você pode substituir por grep "192.168.1.10".

Porém, ressalto que como é um assunto externo ao curso e que não tenho acesso ao cenário completo do projeto, outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema.

Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!