Получить некоторое значение из журналов Apache с awk и grep

Я пытаюсь получить какой-то смысл из моих файлов журнала apache: я хочу проанализировать свой журнал доступа и получить некоторую статистику о 200 status code хиты (сколько раз каждый из них был поражен).

Итак, я попытался изучить магию awk и вот что я получил прямо сейчас:

grep "HTTP/1.1\" 200" access.log | awk '{print $7 } ' | sort | uniq -c | sort -n

Это делает большинство вещей, которые я хочу: он выбирает все записи в журналах, которые закончились попаданием 200 из access.log, затем выбирает часть, которая соответствует сгенерированному пути, сортирует их, подсчитывает каждый уникальный элемент и сортирует по количеству раз этот уникальный элемент был поражен.

Итак, результат выглядит так:

  1 /public/img/upload/image_3.jpg
  2 /public/img/upload/image_2.jpg
  8 /public/img/upload/image_1.jpg
 18 /public/js/main.js
 33 /
236 /index.html

Я пытаюсь продвинуть это немного дальше:

  • because I have logrotate, I have many other files like access.log.1, ..., access.log.N and I want to get this statistics for all of them together. The only solution I have found is to use grep "my 200 expression" -R /pathToDirWithLogs which will grep over all files in directory, which clearly is not nice, because it will grep not only logs. Listing the files is also not an option, because I do not know the number N.
  • Меня не особо волнует каждый отдельный файл в /public/img/upload/, мне просто важно, сколько из них было найдено. Здесь я полностью потерян, не имея понятия, с чего начать. Но вот пример того, что я хочу для моего простого вывода 11 /public/img/upload/* 18 /public/js/main.js 33 / 236 /index.html

Здесь public / img / upload представляет все хиты, которые были сгенерированы там: 8 из image_1, + 2 из image_2 и 1 из image_3.

Есть ли какие-нибудь awk, grep фокусники, чтобы показать мне путь?

1 ответ

Решение

Команда grep (как и многие утилиты) будет принимать несколько файлов, предоставляемых оболочкой, поэтому

grep -h "HTTP/1.1\" 200" /path/to/log/dir/access.log*

(или аналогичный) должен делать то, что вы хотите в этом отношении.

Вторая часть вашего вопроса неясна - откуда нам знать, что вы не заинтересованы в отдельных файлах в /public/img/upload но вы заинтересованы в отдельных файлах в /public/js а также / но, видимо, нет /index.html,

Разъяснение этого требования, вероятно, приведет к решению, но вам следует потратить некоторое время на то, чтобы решить, чего вы хотите, а затем попробовать самостоятельно.

Вы также можете быть заинтересованы в awstats.

Другие вопросы по тегам