2012-06-21 10:54:47 +0000 2012-06-21 10:54:47 +0000
22
22
Advertisement

Como dar uma entrada num ficheiro de registo dentro de um período de tempo específico

Advertisement

Tenho um ficheiro de registo, cada linha do registo é prependida com uma data, como tal:

2012-03-06 11:34:48,657 blah blah blah...

Como posso grep este ficheiro e obter apenas as linhas das 8h às 23h apenas?

A minha intenção é contar o número de erros que acontecem entre as 8h e as 23h.

Advertisement
Advertisement

Respostas (3)

24
24
24
2012-06-21 11:08:20 +0000
egrep '^[^]+ (0[89]|1[0-9]|2[012]):'

Explicação detalhada pode ser encontrada em vários tutoriais regex (expressão regular); egrep usa a sintaxe “POSIX estendida” (man 7 regex).

& - O primeiro ^ significa “início da linha”.

& - [^]+ apenas corresponde ao campo de data, independentemente da data real.

& - (...|...|...) significa “qualquer um dos padrões dados”, portanto (0[89]|1[0-9]|2[012]) significa “0[89] ou 1[0-9] ou 2[012]”. Corresponderá a todos os números de 08 a 22.


Uma opção um pouco melhor é:

awk -F'[:]' '$2 >= 8 && $2 <= 22 { print }'

A opção -F divide cada linha em campos separados de acordo com o [:] regex (correspondendo a : ou a um espaço), e o awk script verifica a 2ª coluna (a hora).

21
21
21
2012-06-21 11:11:02 +0000

Porquê dar-se ao trabalho de usar grep? Pode simplesmente usar sed.

exemplo:

sed -n '/Jun 17 13:39:54/ , /Jun 18 10:50:28/p' kern.log

Isto irá imprimir todos os registos entre June 17 13:39:54 e June 18 10:50:28.

0
Advertisement
0
0
2016-05-09 06:43:49 +0000
Advertisement

Na verdade, há uma maneira muito mais fácil de o fazer.

Descarregar/Documentação: autodrgrep.kl.sh

Command:

./autodrgrep.kl.sh notchef /tmp/client.log '2016-05-08_08:00:00,2016-05-08_23:00:00' 'INFO' 'a2ensite' 5 10 -show

Explicação:

  • autodrgrep.kl.sh é o nome da ferramenta.

  • notchef é uma opção que é passada à ferramenta para lhe dizer o que fazer. Neste caso particular, é dizer à ferramenta que tipo de ficheiro de registo /tmp/client.log é.

  • /tmp/client.log é obviamente o ficheiro de registo.

  • 2016-05-08_19:12:00,2016-05-08_21:13:00 é o intervalo de datas dentro do log que deseja digitalizar

  • “INFO” é uma das cordas que está nas linhas de log que lhe interessa.

  • “a2ensite” é outra string na mesma linha em que espera encontrar a string “INFO”. Especificar estas duas cordas (INFO e a2ensite) isola e processa as linhas que deseja muito mais rapidamente, particularmente se estiver a lidar com um enorme ficheiro de registo.

  • 5 especifica Advertência. Ao especificar 5, está a dizer ao programa para alertar como AVISO se houver pelo menos 5 ocorrências das cadeias de caracteres de pesquisa que especificou

  • 10 especifica Crítico. Ao especificar 10, está a dizer ao programa para alertar como CRÍTICO se houver pelo menos 10 ocorrências das cadeias de caracteres de pesquisa que especificou.

  • -show especifica que tipo de resposta irá obter. Ao especificar -show, está a dizer que se for encontrada alguma coisa que corresponda aos padrões especificados, envie para o ecrã.

Execução da amostra:

# ./autodrgrep.kl.sh notchef /tmp/client.log '2016-05-08_19:12:00,2016-05-08_21:13:00' 'INFO' 'a2ensite' 5 10 -show

[2016-05-08 19:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:13:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 19:42:57-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:42:57-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:42:57-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:43:08-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:43:11-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:13:10-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:42:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:42:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:42:59-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:43:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:43:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 21:12:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 21:12:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 21:12:59-07:00] INFO: execute[a2ensite default] ran successfully
23
2---78720---23---ATWFILF---(2016-05-08)-(19:12)---(2016-05-08)-(21:13) SEAGM

E se o intervalo de data ou hora especificado pelo utilizador não estiver no log?

Cada execução do comando acima terá sempre uma linha (última linha da saída) que diz “ATWFILF” ou “ETWNFILF”.

  • ATWFILF significa que o intervalo real de datas ou de tempo que solicitou pesquisar foi encontrado no registo. Portanto, isto é muito bom.

  • ETWNFILF significa que o intervalo de data ou período de tempo real que solicitou pesquisado NÃO foi encontrado no registo. Neste caso, a hora mais próxima da hora que especificou será detectada e utilizada em seu lugar.

Advertisement
Advertisement