Одне, чого я ніколи не бачив, щоб хто-небудь інший робив, з причин, які я не уявляю, - це змінити формат файлу журналу Apache на більш легко розбірливу версію з інформацією, яка насправді має значення для вас.
Наприклад, ми ніколи не використовуємо базовий протокол HTTP, тому нам не потрібно реєструвати ці поля. Я буду зацікавлений в тому , як довго кожен запит займає служити, тому ми додамо , що в. Для одного проекту, ми також хочемо знати (на нашій балансуванню навантаження) , якщо будь-які сервера обслуговувати запити повільніше , ніж інші, тому ми реєструємо ім'я сервера, до якого ми звертаємось.
Ось уривок з конфігурації apache одного сервера:
# We don't want to log bots, they're our friends
BrowserMatch Pingdom.com robot
# Custom log format, for testing
#
# date proto ipaddr status time req referer user-agent
LogFormat "%{%F %T}t %p %a %>s %D %r %{Referer}i %{User-agent}i" standard
CustomLog /var/log/apache2/access.log standard env=!robot
Що ви не можете насправді сказати з цього, це те, що між кожним полем є буквальний символ вкладки (\ t). Це означає, що якщо я хочу зробити якийсь аналіз в Python, можливо, показати, наприклад, не 200 статусів, я можу це зробити:
for line in file("access.log"):
line = line.split("\t")
if line[3] != "200":
print line
Або якщо я хотів зробити "хто зображає гарячі посилання?" це було б
if line[6] in ("","-") and "/images" in line[5]:
Для підрахунку IP в журналі доступу попередній приклад:
grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" logfile | sort -n | uniq -c | sort -n
стає щось подібне:
cut -f 3 log | uniq -c | sort -n
Легше читати і розуміти, і набагато менш обчислювально дорогий (без регулярних виразів), який на 9 ГБ журналів робить величезну різницю в тому, як триває це. Коли це дійсно стає акуратним, якщо ви хочете зробити те ж саме для User-агентів. Якщо ваші журнали обмежені місцями, вам потрібно виконати відповідність регулярних виразів або пошук рядків вручну. З цим форматом це просто:
cut -f 8 log | uniq -c | sort -n
Точно так само, як і вище. Насправді, будь-яке резюме, яке ви хочете зробити, є по суті абсолютно однаковим.
Чому на землі я б витрачав процесор своєї системи на awk and grep, коли скорочення буде робити саме те, що я хочу на параметри швидше?