Я хотел бы проанализировать файл журнала доступа и вернуть количество запросов за последние 7 дней. У меня есть эта команда
cut -d'"' -f3 /var/log/apache/access.log | cut -d' ' -f2 | sort | uniq -c | sort -rg
К сожалению, эта команда возвращает количество запросов с момента создания файла и сортирует его по категориям HTTP-кода. Мне нужно только число, без категорий, и только за последние 7 дней.
Это должно быть возможно, но я погряз во вложенности команд Bash, которая не работает, и я не понимаю, почему.
Концептуально сделайте следующее:
date -d "-7 days" +%d\/%b\/%Y
-> 10 октября 2013 г.sed '1,/~pattern~/d' access_log
| wc -l
Так что должен быть способ объединить вышеперечисленное в одну команду:
$ sed '1,/10\Oct\/2013/d' access_log | wc -l
29
$ sed '1,/$(date -d "-7 days" +%d\/%b\/%Y)/d' access_log | wc -l
$
Где-то во вложении моя команда date и sed плохо работают. И все, что я пробую с различными комбинациями кавычек и экранирований, не имеет никакого значения.
Что мне не хватает?
Это утилита Microsoft, так что, вероятно, это не то, что вам нужно, но есть утилита под названием LogParser (ссылка на сайт), который проанализирует файлы журнала Apache и позволит вам использовать синтаксис в стиле SQL для фильтрации, агрегирования и т. д.
Вы хотите указать параметр входного формата как NCSA.
Я бы настроил ротацию журналов ежедневно (как это сделать, будет зависеть от вашей ОС), а затем использовал ту же команду выше для 7 самых последних журналов. Что касается вашего существующего журнала, либо используйте такой инструмент, как grep, чтобы извлечь только те дни, которые вы хотите, либо разделите этот журнал на журналы для каждого дня.
Если вам нужно что-то более элегантное, я бы просто поискал один из бесчисленных инструментов анализа журналов, которые уже существуют.
Вот пример разделения существующего журнала: Разделить файл access.log по датам с помощью инструментов командной строки
Как насчет использования таких инструментов, как Splunk или Loggly? У Loggly есть бесплатная пробная версия Splunk Storm (http://splunkstorm.com) можно бесплатно подписаться, и если ваши файлы журналов не превышают свои ограничения, индексирование журналов и запуск различной статистики по запросам за последние 7 дней (или в различные другие периоды времени) должно быть тривиальным.