Часто администраторам сайтов необходимо найти уникальные IP-адреса, которые приводят трафик на их сайты. Обычно это делается для определения источников трафика высокой ценности, а также для обнаружения спама. В этой статье мы узнаем, как получить уникальный IP-адрес из файла журнала.
Как получить уникальный IP-адрес из файла журнала
В нашей статье мы будем получать уникальный IP-адрес из лог-файла сервера Apache. Вы можете использовать этот метод и для лог-файлов других серверов.
Вот пример записи журнала от Apache.
1 | 172.70.46.181 - - [25/Jan/2023:15:54:54 +0300] "GET /_404.html HTTP/1.1" 200 1104 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" |
В большинстве файлов журнала первым значением в каждой записи журнала является IP-адрес, с которого был получен запрос. Вы можете использовать следующую команду tail для получения последней записи вашего файла журнала, которую вы можете использовать для изучения его формата.
1 | tail -n 1 /var/log/httpd/access_log |
Чтобы получить уникальный IP-адрес, мы используем комбинацию команд awk, sort и uniq. Допустим, ваш файл журнала apache находится по адресу /home/ubuntu/apache_log, тогда вот команда awk для извлечения первого значения (столбца) из каждой записи.
1 | awk '{ print $1 } ' /var/log/httpd/access_log |
В приведенной выше команде awk, $1 очень важен, поскольку он определяет номер столбца IP-адреса в каждой строке входного файла. Например, если IP-адрес находится в 3-й колонке, а не в 1-й, то вам нужно заменить $1 на $3.
Каждый запрос, отправленный на ваш веб-сервер, регистрируется как отдельная запись, поэтому для каждого IP-адреса будет несколько записей. Это происходит потому, что каждый запрос (html, css, js, изображения и т.д.), отправленный с веб-страницы на клиентском браузере, регистрируется как отдельная запись.
Поэтому приведенный выше вывод команды awk будет содержать несколько записей для каждого IP-адреса. Мы будем использовать команду sort для сортировки IP-адресов. Для этого мы передадим вывод команды awk команде sort.
1 | awk '{ print $1 } ' /var/log/httpd/access_log | sort |
Наконец, мы используем команду uniq для получения уникального списка IP-адресов. Для этого мы передадим вывод команды sort в команду uniq.
1 | awk '{ print $1 } ' /var/log/httpd/access_log | sort | uniq |
Приведенная выше команда даст вам список уникальных IP-адресов в файле журнала вашего веб-сервера.
Если вы хотите получить количество уникальных IP-адресов, посещающих ваш сайт, то вы можете передать вышеприведенный результат команде wc, как показано ниже.
1 | awk '{ print $1 } ' /var/log/httpd/access_log | sort | uniq | wc -l |
Если первый столбец журнала вашего сервера не содержит IP-адрес, то обновите приведенную выше команду awk соответствующим образом. Например, если IP-адрес находится в третьем столбце каждой записи, то обновите команду awk, как показано на рисунке.
1 | awk '{ print $3 } ' /var/log/httpd/access_log |
Заключение
В этой статье мы рассмотрели простой способ получения уникального IP-адреса из файла журнала. Вы можете настроить его в соответствии с вашими требованиями, в зависимости от формата журнала, изменив команду awk