Журналы сервера - где лежат, что смотреть, ротация
Разбираемся с журналами веб-окружения: где лежат логи веб-сервера, PHP и базы, как найти в них конкретную ошибку сайта и как не дать журналам занять весь диск.
Что нужно знать заранее
Журналов на сервере несколько, и каждый отвечает за свой слой работы сайта. Ошибку покупателя видно в журнале веб-сервера, причину сбоя кода - в журнале PHP, а медленный отчёт - в журнале базы данных.
Пути к журналам задаются конфигурацией сервера, а не догадками по чужой документации. В веб-окружении у каждого сайта пула свой конфиг, и путь журнала прописан именно в нём.
Ошибку ищут сразу по двум признакам: по времени запроса и по его адресу. Совпадение секунды и адреса превращает три журнала в одну связную историю: запрос пришёл, обработчик упал, пользователь увидел ошибку.
Шаги
- Найти в конфигурации веб-сервера реальные пути журналов доступа и журналов ошибок.
- Посмотреть последние записи журнала ошибок и запомнить точное время нужного сбоя.
- Связать запись с журналом PHP по времени и по адресу того же запроса.
- Включить журналы медленных запросов PHP и базы, если сайт стал тормозить.
- Проверить ротацию журналов и посмотреть, сколько места они занимают на диске.
Решение
Находим настоящие пути журналов:
grep -rn 'access_log\|error_log' /etc/nginx/ | grep -v '#' | headls -lh /var/log/nginx/ /var/log/php-fpm/ 2>/dev/null# в веб-окружении у каждого сайта пула свой конфиг и свой журналСписок конфигов важнее общего каталога журналов. Сайт из пула часто пишет в отдельный файл, и разбор чужого журнала уводит на полчаса в сторону.
Смотрим ошибки веб-сервера за последние минуты:
tail -n 200 /var/log/nginx/error.loggrep -c ' 502 ' /var/log/nginx/access.log # сколько раз упал обработчик PHPawk '$9 >= 500 {print $4, $7, $9}' /var/log/nginx/access.log | tail -20# четвёртое и седьмое поля - это время запроса и его адресОтветы с кодом 502 и 504 почти всегда указывают не на веб-сервер. Первый означает упавший обработчик PHP, второй - обработчик, не уложившийся в отведённое время.
Связываем ошибку сайта с журналом PHP:
systemctl list-units --type=service | grep -i php # точное имя службы в окруженииjournalctl -u bx-php-fpm --since '30 min ago' | tail -40grep -F '25/Aug/2026:22:15' /var/log/php-fpm/*.log# ошибку ищут по той же минуте, что и запись веб-сервераИмя службы обработчика в окружении отличается от привычного. Поэтому его сначала уточняют списком служб, а уже потом читают журнал через системный сборщик сообщений.
Включаем журнал медленных запросов PHP:
; в конфигурации пула, например /etc/php-fpm.d/bx.confslowlog = /var/log/php-fpm/www-slow.logrequest_slowlog_timeout = 5s ; сохранять стек запросов дольше пяти секундЖурнал медленных запросов пишет стек вызовов, а не только адрес. Это единственный способ увидеть, в какой строке кода сайт проводит свои пять секунд.
Смотрим медленные запросы базы:
SHOW VARIABLES LIKE 'slow_query_log%';SHOW VARIABLES LIKE 'long_query_time';-- разбор накопленного журнала: mysqldumpslow -s t -t 20 <файл>Проверяем ротацию и размер журналов:
du -sh /var/log/nginx /var/log/php-fpm /var/log/mysql 2>/dev/nulllogrotate -d /etc/logrotate.d/nginx # проверка правил без выполненияfind /var/log -type f -size +500M -printf '%s %p\n' | sort -rn | head# журнал без ротации растёт до конца диска и роняет сайт целикомТипичные проблемы
В журнале нет ни одной записи о сбое.
Сайт пишет в собственный журнал пула, а читается общий журнал веб-сервера. Путь берут из конфига конкретного сайта, а не из каталога по умолчанию.
Ошибка 502 есть, а причины в журнале не видно.
Причина отказа лежит в журнале обработчика PHP, а не в журнале веб-сервера. Записи связывают по времени: веб-сервер пишет отказ, обработчик - упавший процесс.
Место на диске кончилось за одну ночь.
Журнал вырос без ротации после всплеска ошибок или сканирования сайта ботами. Ротацию настраивают заранее и ограничивают в ней и размер файла, и число копий.
Журнал медленных запросов пуст, а сайт тормозит.
Порог записи выше реального времени ответа либо журнал не включён вовсе. Порог ставят около секунды и обязательно перезапускают службу после правки её конфигурации.
Записи журнала обрываются на середине дня.
Ротация выполнилась, а служба продолжила писать в уже переименованный ею старый файл. В правилах ротации не хватает перезагрузки службы после смены файла.
Частые вопросы
Где лежат журналы сайта в веб-окружении?
Путь прописан в конфиге конкретного сайта пула, а не в общем каталоге журналов. Его находят поиском директив журнала в каталоге конфигурации веб-сервера.
Чем 502 отличается от 504?
Первый означает упавший обработчик PHP, второй - обработчик, не уложившийся в отведённое время. Причину в обоих случаях ищут в журнале обработчика, а не веб-сервера.
Как поймать медленную страницу?
Журналом медленных запросов PHP с порогом в несколько секунд: он пишет стек вызовов. Адрес из журнала веб-сервера показывает только страницу, но не место в коде.
Сколько хранить журналы?
Обычно две-четыре недели: этого хватает для разбора и не занимает диск. Точный срок задают в правилах ротации вместе с ограничением числа файлов.
Куда писать журнал своего кода?
В отдельный файл проекта, а не в общий журнал сервера. Тогда его ротация настраивается своим правилом и не мешает разбору системных ошибок.
Смежное
- BitrixVM и веб-окружение - оглавление подтемы
- Мониторинг сервера: что смотреть до того, как сайт упадёт - регулярная проверка показателей
- Закончилось место на диске: разбор причин - когда журналы съели раздел
- Отладка на боевом сайте: журналы, режим ошибок, поиск виновника - журналы самой платформы
- Ошибки 500 и 502: где искать причину и чем они отличаются - разбор кодов ответа
- nginx и PHP-FPM: разделение статики, пулы, разбор медленных ответов - настройка обработчика и пулов
- Медленный запрос к базе: поиск, план, индекс - что делать с найденным запросом
- Инфраструктура и эксплуатация - устройство серверной части целиком