
Я ищубыстрый сценарийкоторый проанализирует большой mail.log и вернет частьмежду двумя указанными временными метками. Я хотел бы запустить его на всех моих почтовых серверах и скопировать соответствующие части журнала в центральное хранилище для дальнейшего анализа.
Я написал кое-что на bash, что работает, но медленно.
Кто-нибудь знает овсе, что уже существуетчтобы добиться этого — или мне нужно изучить Perl и придумать что-то самому?
(Я не выношу это на SO, так как я еще не на той стадии, когда хочуписатьлюбой код - просто ищу что-то, что уже использует кто-то другой)
решение1
Я люблю awk :)
Для моих журналов, которые имеют следующий формат:
Jul 14 12:49:10 xxxxxx sendmail[31337]: ...........
Я хотел бы использовать:
awk '$3 >= "12:00:00" && $3 <= "13:00:00" {print;}' < /var/log/maillog
Вероятно, вы можете адаптировать это по мере необходимости, например, если вы не делите бревна по дням.
Бонус:
Формат Apache, который у меня случайно оказался под рукой:
xxx.xxx.xxx.xxx - - [01/Jul/2009:03:06:24 -0400] "GET /favicon.ico HTTP/1.1" 200 3638
awk '$4 >= "[01/Jul/2009:03:00:00" && $4 <= "[01/Jul/2009:04:00:00" {print;}' < access_log
решение2
Для определенного диапазона дней и для печати > выходного файла
(Я не могу оставить комментарий к ответу выше, иначе я бы это сделал)
НТН
awk '$2 >= "21" && $3 >= "09:00:00" && $2 >= "21" && $3 <= "11:00:10" {print > "m_range.log";}' < /var/log/m.log
cat m_range.log
...
Nov 21 09:00:17 mail postfix/qmgr[1694]: 1C50D276524A: from=<[email protected]>, size=2378, nrcpt=1 (queue active)
...