Что можно узнать из логов сервера: разбираем на 3 примерах

Если на сайте что-то пошло не так, в логах можно найти причину и узнать детали происшествия. Расскажем, где искать информацию и как она может быть представлена.

В логах текстом фиксируется информация обо всех действиях пользователей и системы:

  • IP-адрес пользователя;
  • дата и время посещения сайта;
  • ошибки сервера;
  • данные о запросах к базам данных и конкретным страницам;
  • информация об устройстве и многое другое.

Логи помогут узнать, что сайт атаковали боты или же у пользователей есть проблемы с загрузкой страниц.

Анализировать логи можно:

  • Вручную. Бесплатно, но нужно больше времени и ресурсов веб-мастера, чтобы проанализировать массив данных.
  • В программе-анализаторе. Сервис агрегирует и визуализирует все данные на дашборде. Его можно адаптировать — исходный код есть в Open Source. Базовый набор функций бесплатный, расширенный — уже платный. Пример сервиса — Elastic Stack.
Интерфейс мониторинга логов в Elastic Stack. <a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fwww.elastic.co%2Fobservability%2Flog-monitoring&postId=1591070" rel="nofollow noreferrer noopener" target="_blank">Источник</a>
Интерфейс мониторинга логов в Elastic Stack. Источник

В статье разберем три примера, когда помогут логи: если сайт атакует бот, ухудшилась производительность или есть ошибка в базе данных.

Атака ботов на сайт

Целенаправленную атаку на сайт можно распознать по нескольким признакам:

  • повышенная нагрузка на сервер;
  • рост количества запросов от одного пользователя;
  • нетипичное поведение пользователей на сайте: хаотичное перемещение по блокам, слишком быстрый скролл разделов или зацикливание на второстепенных текстах.

Количество запросов к системе может достигать сотен тысяч. В результате сайт или отдельные страницы не работают. Чтобы найти признаки атаки, нужно проанализировать логи доступа, access.log. Они записываются в стандартном формате:

[доменное имя сайта][IP-адрес пользователя][дата и время визита][тип запроса][URL, к которому обратился пользователь][протокол, по которому пользователь соединился с сайтом][код ответа сервера][количество байт информации, которую передали пользователю][дополнительная информация]

Как распознать атаку с помощью логов:

  • Много запросов с одного IP-адреса. Адрес указан в начале каждой строки лога. После него — данные о времени запроса, сути, статус-коде ответа и его размере.
192.168.1.1 - - [10/Mar/2023:12:00:01 +0000] "GET /index.html HTTP/1.1" 200 1042 192.168.1.1 - - [10/Mar/2023:12:00:02 +0000] "GET /about.html HTTP/1.1" 200 2048 192.168.1.1 - - [10/Mar/2023:12:00:03 +0000] "GET /contact.html HTTP/1.1" 200 1500
  • Много ошибок 404 и 500. Статус-код 404 указывает на ненайденную страницу, а 500 — на внутреннюю ошибку сервера. Если количество ошибок растет, возможно, боты стремятся получить доступ к уязвимостям.
192.168.1.1 - - [10/Mar/2023:12:00:06 +0000] "GET /index.html HTTP/1.1" 404 1042 192.168.1.1 - - [10/Mar/2023:12:00:07 +0000] "GET /index.html HTTP/1.1" 500 1042 192.168.1.1 - - [10/Mar/2023:12:00:08 +0000] "GET /index.html HTTP/1.1" 404 1042
  • Частота запросов. Признак атакующего бота — ежесекундное обращение к страницам.
192.168.1.1 - - [10/Mar/2023:12:00:01 +0000] "GET /index.html HTTP/1.1" 200 1042 192.168.1.1 - - [10/Mar/2023:12:00:02 +0000] "GET /about.html HTTP/1.1" 200 2048 192.168.1.1 - - [10/Mar/2023:12:00:03 +0000] "GET /contact.html HTTP/1.1" 200 1500

Долгая загрузка страниц

Оптимальная скорость загрузки для разных типов сайтов отличается. Часто компании сами определяют KPI по скорости для своего сайта. По данным Deloitte, ускорение загрузки на 0,1 секунды позволяет увеличить конверсию пользователей на 8,4%. Для проверки обратитесь к данным о времени ответа сервера в access.log.

Для сервера Apache

Информацию о времени ответа нужно искать в логах combined:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined

%D — время обработки запроса в микросекундах. Посмотрим на примере:

127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 123

Время ответа сервера составило 123 микросекунды.

Для сервера Nginx

Формат логов можно настроить с помощью директивы log_format в файле конфигурации nginx.conf. Параметр $request_time показывает время обработки запроса в секундах:

log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $request_time';

Вернемся к примеру. В этом случае лог покажет 0,123 секунды:

127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /index.html HTTP/1.1" 200 612 0.123

В некоторых конфигурациях серверов параметры могут быть отключены. Нужно настроить их так, чтобы получать информацию о времени ответа сервера.

Ошибки в работе баз данных

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

Искать проблему нужно в логах ошибок error.log. Посмотрим, как выглядят записи.

Стандартный формат:

[дата время][уровень][идентификатор процесса][информация о клиенте] сообщение об ошибке: указание на место в коде
  • Ошибка соединения с базой данных. Она появляется из-за неправильного адреса, учетных данных или порта.
[Mon Mar 10 12:00:01.123456 2023] [php:error] [pid 1234] [client 192.168.1.1:45678] PHP Fatal error: Uncaught Exception: Unable to connect to the database: Connection failed in /var/www/html/index.php:15
  • Ошибка выполнения SQL-запроса. Его не выполнить, потому что нет указанной базы данных.

[Mon Mar 10 12:05:01.654321 2023] [php:error] [pid 1234] [client 192.168.1.1:45678] PHP Warning: mysqli_query(): (HY000/1049): Unknown database 'mydatabase' in /var/www/html/db.php on line 10

Ошибки можно искать по ключевым словам с помощью grep. Например, error или database:

grep -i "error" /var/log/apache2/error.log grep -i "database" /var/log/nginx/error.log

Чтобы быстро находить причины неполадок на сайте, регулярно проверяйте логи. Они кладезь информации о пользователях и действиях в системе. Уметь читать логи — важный скил для разработчиков и веб-администраторов.

С какими проблемами на сайте вы справлялись благодаря логам? Расскажите в комментариях.

2424
22
1 комментарий

Нахожу битые ссылки на сайте.