Разбираем ваш access.log

Go to main page

Пришлось мне давече "воевать" с перегрузкой на моем сервере. Ничто не предвещало беды, как говорится, но график использования CPU ощутимо полез вверх. Посещение сайтов, хостящихся на этой железке, было как обычно никакое, значит это здесь не причем. То есть нужно было копать глубже. Начал копать...

Открыл access.log файл одного из сайтов, но в нем огромная куча записей и как разобраться в том откуда приходит большое количество запросов не ясно. Стал гуглить подходящие bash команды и спустя некоторое время собрал вот такую штуковину:

1cat access.log | cut -d' ' -f1,7 | sort | uniq -c | sort -n

Сие чудо состоит из пяти отдельных инструкций, которые вместе позволяют увидеть количество запросов с какого IP адреса приходилось на какой ресурс.

И так по порядку:

  1. cat access.log - читает и выводит в STDOUT содержимое файла;
  2. cut -d' ' -f1,7 - разбивает каждую строку на сегменты с разделителем "пробел" и возвращает только 1-й и 7-й сегменты. В моем случае - это IP адрес и ресурс соответственно;
  3. sort - сортирует строки;
  4. uniq -c - удаляет повторяющиеся с параллельным их подсчетом;
  5. sort -n - сортирует результат;

В итоге имеем примерно такой вывод:

15 72.46.135.146 /.7z
25 72.46.135.146 /backup.tar.bz2
35 72.46.135.146 /site.com.rar
45 72.46.135.146 /site.com.zip
55 72.46.135.146 /site.tar.gz
66 176.36.80.39 /robots.txt
76 217.69.133.217 /robots.txt
86 24.114.29.162 /administrator/index.php
918 136.243.5.215 /robots.txt
10234 46.118.154.195 /administrator/index.php

А это уже дает понимание того, что с адреса 46.118.154.195 долбятся в админку больше чем кто либо. А с адреса 72.46.135.146 пытаются нати какой нибудь случайно забытый бекап.

В общем, принимаем соответствующие меры на собственное усмотрение.