Я ищу быстрый сценарий который проанализирует большой mail.log и вернет часть между двумя указанными отметками времени. Я хотел бы запустить его на всех своих почтовых серверах и попросить их скопировать соответствующие части журнала в центральное место для дальнейшего анализа.
Я написал что-то на bash, что работает, но работает медленно.
Кто-нибудь знает о все, что уже существует для этого - или мне нужно выучить Perl и что-то придумать самому?
(Я не ставлю это на ТАК, так как я еще не в той точке, где я хочу записывать любой код - просто ищу то, что уже использует кто-то другой)
Обожаю 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
Для определенного диапазона дней и для печати> выходной файл
(Я не могу добавить комментарий в ответ выше, иначе я это сделаю)
HTH
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=<www-data@...ia.com>, size=2378, nrcpt=1 (queue active)
...