grep -E 'fatal|error|critical|failure|warning|' *.log
Eu tenho um conjunto de arquivos de log que preciso revisar e gostaria de pesquisar strings específicas nos mesmos arquivos de uma vez. Isso é possível? Atualmente estou usando
grep -E 'fatal|error|critical|failure|warning|' /path_to_file
Como eu uso isso e pesquiso as sequências de vários arquivos de uma só vez? Se isso é algo que precisa ser roteirizado, alguém pode fornecer um script simples para fazer isso?
grep -E 'fatal|error|critical|failure|warning|' *.log
Você poderia usar algo assim:
find . -name "*.log" | xargs grep -E 'fatal|error|critical|failure|warning|'
Isso localizará todos os arquivos com .log
como extensão e aplicará o comando grep
.
Se for mais simples, você pode especificar cada arquivo um após o outro.
grep -E 'fatal|error|critical|failure|warning' file1.log file2.log
Se você precisar aplicar um conjunto arbitrário de nomes de arquivos que não podem ser recuperados por uma expressão regular:
grep -E 'fatal|error|critical|failure|warning|' 'cat<<FIN
> file1
> file2
> ...
> filen
> FIN'
Qual é a vantagem de colar os nomes dos arquivos um após o outro? Você pode compilar a lista de nomes de arquivos em um arquivo de texto e depois colá-los.
Esta foi uma tarefa muito demorada. E sim, certamente precisaria ser roteirizado se você for pesquisar várias strings em vários logs diferentes ao mesmo tempo. Mas recentemente tive que fazer isso e foi muito doloroso. No entanto, está pronto e pode ser baixado do seguinte link:
Download do script de pesquisa de log
A maneira como isso funciona é bem simples.
Cenário 1: monitore uma string em apenas UM arquivo de log
./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open' '.' 1 2 single_errCheck -ndshow
Cenário 2: Monitore sequências de texto MULTIPLE em apenas UM arquivo de log
./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 multi_errCheck -ndshow
Cenário 3: Monitore cadeias únicas / múltiplas em vários arquivos de log
./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 multi_err_multi_logCheck -ndshow
Notas:
O _P_ significa OR - Substitui o pipe "|" símbolo porque é menos provável que você tenha que procurar por uma string contendo "_P_". Se você não deseja digitar "_P_", basta substituir o _P_ por "|".
Ao usar esse script, os parâmetros que você vai alterar com frequência são:
Ao usar '-ndfoundmul', você obterá uma saída semelhante a:
[root@dgphxtest001]# ./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 blahblahA -ndfoundmul
OK: [/var/log/messages][1] /var/log/messages:P=(can_t_open=0 ntpd_stat=0)_F=(117s)_R=(228,228=0)
Solução para o problema do pôster original: Verificação de várias strings em vários arquivos de log
./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m 'fatal_P_error_P_critical_P_failure_P_warning' '.' 1 2 multierr_logCheck -ndshow
Sistemas operacionais: Isso foi testado no Ubuntu e Red Hat
grep -EFn "fatal|error|critical|failure|warning|search-string" /path/to/the/file/log_file?.lo* --color=auto
Isto irá procurar 'fatal ou erro ou crítico ou falha ou aviso ou cadeia de pesquisa' nos arquivos com o nome começando com 'log_file?' e extensão 'lo ' * no caminho / caminho / para / o / arquivo / e dá à seqüência de pesquisa uma cor aleatória e o número da linha de impressão em que ela foi encontrada.
A resposta de JigarGandhi demonstra o uso do curinga asterisco. Há mais deles e você pode vê-los aqui ou executando man 7 glob
.
Um deles que achei útil é o intervalo correspondente a []
. Como o sistema em que eu trabalho produz arquivos de log sequencialmente numerados, por exemplo, product.log.1
product.log.2
...
product.log.200
, é útil usar um único comando em 3 ou 4 arquivos sequenciais, mas não mais. Então isso
grep 'whatever' product.log.[5-7]
irá grep para todos os arquivos terminados em product.log. 5, 6 ou 7. O curinga não é necessário no final, então a resposta da flickerfly pode ser simplificada para
grep -E 'fatal|error|critical|failure|warning' file[1,2].log
Observe também que esses curingas podem ser usados em outros comandos, assim como em cp
, por exemplo.
Se você quiser pesquisar recursivamente em arquivos de subdiretórios também, então você pode usar o comando abaixo
Ele pesquisará recursivamente em arquivos de subdiretórios também
egrep -r "string1|string2" pathname