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

Как смазать лог-файл в течение определенного периода времени.

У меня есть файл журнала, каждая строка в журнале предваряется датой:

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

Как мне grep получить этот файл и получить только строки с 8 утра до 11 вечера?

Я хочу посчитать количество ошибок, происходящих с 8 утра до 11 вечера.

Ответы (3)

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

Подробное объяснение можно найти в различных учебниках regex (регулярное выражение); egrep использует синтаксис “POSIX extended” (man 7 regex).

  • Первый ^ означает “начало строки”.

  • [^]+ просто соответствует полю даты, независимо от фактической даты.

  • (...|...|...) означает “любую из данных деталей”, поэтому (0[89]|1[0-9]|2[012]) означает “либо 0[89], либо 1[0-9], либо 2[012]”. Она будет соответствовать всем числам от 08 до 22.


Несколько лучший вариант:

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

Опция -F разбивает каждую строку на отдельные поля в соответствии с [:] regex (соответствует либо :, либо пробелу), а скрипт awk проверяет 2-ю колонку (час).

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

Зачем использовать смазку? Ты можешь просто использовать Сэд.

пример:

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

Это распечатает все журналы между June 17 13:39:54 и June 18 10:50:28.

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

Вообще-то, есть гораздо более простой способ сделать это.

Скачать/документировать: autodrgrep.kl.sh

Команда:

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

Пояснение:

  • autodrgrep.kl.sh - имя инструмента.

  • notchef - опция, которая передаётся инструменту, чтобы сказать ему, что делать. В данном конкретном случае он сообщает инструменту, какой тип лог-файла /tmp/client.log.

  • /tmp/client.log конечно же является лог-файлом.

  • 2016-05-08_19:12:00,2016-05-08_21:13:00 - это диапазон дат из журнала, который вы хотите просканировать

  • “INFO” - это одна из строк в интересующих вас строках журнала.

  • “a2ensite” - еще одна строка в той же строке, в которой вы ожидаете найти “INFO”. Указание этих двух строк (INFO и a2ensite) изолирует и обрабатывает нужные вам строки намного быстрее, особенно если вы имеете дело с огромным лог-файлом.

  • 5 указывает Предупреждение. Указав 5, вы говорите программе предупреждать как ПРЕДУПРЕЖДЕНИЕ, если есть как минимум 5 вхождений строк поиска, которые вы указали

  • 10 указывает Critical. Указав 10, вы говорите программе предупреждать как КРИТИЧЕСКИЙ, если в строках поиска, которые вы указали, содержится не менее 10 вхождений.

  • указывает, какой тип ответа вы получите. Указывая -show, вы говорите, что если будет найдено что-то, что соответствует указанным шаблонам, выводите на экран.

Пример выполнения:

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

А что, если указанного пользователем диапазона дат или временного интервала нет в журнале?

Каждое выполнение вышеуказанной команды всегда будет иметь строку (последняя строка вывода) с надписью “ATWFILF” или “ETWNFILF”.

  • ATWFILF означает, что в журнале найден фактический диапазон дат или временных рамок, которые вы запрашивали для поиска. Так что это очень хорошо.

  • ETWNFILF означает, что запрошенный вами диапазон дат или временных рамок не был найден в журнале. В этом случае самое близкое к указанному время будет обнаружено и использовано вместо него.