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