Когда сайт WordPress “падает”, причина почти никогда не лежит в одном месте. Ошибка может возникнуть в PHP, сработать на уровне веб‑сервера, всплыть из базы данных, а в облаке её могут “перехватить” балансировщик, CDN или WAF. Поэтому логировать и разбирать нужно системно: сначала сузить диапазон по времени и URL, затем сопоставить записи из нескольких слоёв.

В этой статье разберём, где смотреть логи WordPress и инфраструктуры, как читать типичные фрагменты, и как быстро перейти от симптома к конкретной причине.

Что именно считать логами в вашей ситуации

Условно логи делятся на пять групп:

  • Логи WordPress и PHP (например, wp-content/debug.log, сообщения WP_DEBUG, stack trace из PHP).
  • Логи веб‑сервера (nginx/Apache: errorlog, accesslog; иногда отдельные журналы для upstream).
  • Логи базы данных (MySQL/MariaDB: error log, slow query log).
  • Логи кэша и сервисов вокруг (Redis/Memcached/Varnish, иногда в отдельном месте хостинга).
  • Логи в облаке и на CDN/прокси (CloudWatch/Cloud Logging/Azure Monitor, а также Cloudflare и аналоги).

На практике “правильный” лог выбирают по тому, что вы уже знаете: код ответа HTTP, время, URL, и есть ли признаки тайм‑аута или блокировки.

Логи WordPress: где смотреть ошибки в самом приложении

Чаще всего с WordPress начинают потому, что там есть контекст: имя файла/класса, сообщение, а иногда и подсказка о плагине. Но важно понимать: WordPress пишет не всё. Например, фатальные ошибки PHP могут прервать выполнение раньше, чем WordPress успеет что‑то записать в debug.log.

Включение WPDEBUGLOG и настройка вывода

Базовый и самый управляемый вариант — включить логирование в файле и запретить вывод пользователю. Обычно это делается в wp-config.php.

Пример безопасной настройки для диагностики:

«`php define(‘WP_DEBUG’, true); define(‘WPDEBUGLOG’, true); define(‘WPDEBUGDISPLAY’, false);

@iniset(‘displayerrors’, 0); «`

Если вы используете хуки или сторонние библиотеки, которые пишут через PHP errorlog, полезно дополнительно проверить настройки PHP на хостинге. Но даже без этого WPDEBUG_LOG часто помогает понять, какие предупреждения/замечания у вас в коде и в плагинах.

После включения подождите 1–5 минут и воспроизведите проблему (обновите проблемную страницу, выполните запрос к админке, вызовите нужный сценарий). Затем смотрите файл debug.log.

Где найти debug.log

Файл обычно лежит в корне установки WordPress, в папке wp-content, с именем debug.log. Точное расположение зависит от настроек и хостинга, но типичный путь выглядит так:

  • wp-content/debug.log

Если файл не появляется, проверьте два момента:

  • Есть ли права на запись в директорию wp-content.
  • Действительно ли загрузился ваш wp-config.php (бывает, что меняют не тот файл при симлинках/мультисайтах).

Как читать debug.log WordPress

Лог WordPress — это не “удобная таблица”, а набор строк с сообщениями уровня warning/notice (в зависимости от настроек) и контекстом. Полезные ориентиры:

  • Фрагменты с названием функции или файла подсказывают, где именно случается проблема.
  • Повторяемые сообщения указывают на “одну и ту же” точку отказа, а не на разные симптомы.
  • Если рядом есть имя плагина или темы, начните с них: чаще всего они первыми ломаются при обновлениях PHP или WordPress.

Типичная ловушка: видеть много сообщений и пытаться исправить всё сразу. Практичнее найти “первое” событие по времени в вашем окне воспроизведения. Остальные записи часто следуют как каскад.

Типичные проблемы при включении WP_DEBUG

Иногда диагностическая настройка работает, но вы не видите ожидаемых ошибок.

Самые частые причины:

  • Включили WPDEBUGDISPLAY, но забыли выключить его обратно. В итоге пользователи видят предупреждения, а вам не легче анализировать из‑за мусора на экране.
  • Логирование включено, но PHP ошибок другого типа в debug.log нет. Например, фатальные ошибки могут останавливаться до записи.
  • Проблема появляется только после кэша или только после очистки. Тогда воспроизводите с нужными условиями: залогиненный пользователь, включённый/выключенный кэш, различная версия браузера.

Если проблема периодическая, делайте “контрольный” запрос: один стабильный URL, который работает всегда, чтобы убедиться, что лог реально пополняется.

Логи PHP и веб‑сервера: nginx/Apache и php-fpm

Даже идеальная настройка WP_DEBUG не заменяет логи уровня сервера. Именно там чаще всего видно фатальные ошибки и причины неуспешного ответа: тайм‑ауты upstream, ошибки модулей, проблемы с правами файлов, сбои php-fpm.

Где смотреть errorlog и accesslog

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

С точки зрения чтения вам важны два файла:

  • access_log (какие запросы приходили и какой статус вернулся)
  • error_log (что пошло не так на сервере)

Для nginx структура часто похожа на:

  • /var/log/nginx/error.log
  • /var/log/nginx/access.log

Для Apache аналогично:

  • /var/log/apache2/error.log
  • /var/log/apache2/access.log

Если у вас связка nginx + php-fpm, ещё встречаются отдельные логи php-fpm. Их местоположение зависит от сборки и настроек, но искать стоит по строкам “php-fpm” или “fpm” в доступных конфигурациях.

Что именно искать в логах веб‑сервера

При диагностике держите в голове соответствие кода ответа и уровня ошибки:

  • 500 — обычно PHP‑ошибка, ошибка приложения или исключение, которое сервер не смог обработать.
  • 502/503 — часто проблема upstream: php-fpm упал, backend недоступен, перегрузка.
  • 504 — обычно тайм‑аут между компонентами (например, nginx ждёт php-fpm дольше лимита).
  • 403 — блокировка модулем безопасности/WAF/настройками доступа.
  • 404 — не обязательно “ошибка”, иногда это просто неверный URL или неправильные rewrite правила.

В error_log вы увидите более конкретную причину: “upstream timed out”, “permission denied”, “FastCGI sent in stderr”, “script not found” и т.д. Именно такие строки стоит первым делом сопоставлять с моментом проблемы.

Как связать запись сервера с запросом пользователя

Самый быстрый мостик — время и параметры запроса. В access_log обычно есть:

  • IP клиента (или адрес прокси)
  • метод и URL (request line)
  • статус (status code)
  • user agent (иногда)

Дальше вы открываете error_log и ищете записи в тот же временной промежуток. Если вы видите несколько похожих ошибок, отталкивайтесь от тех, что совпадают с вашим URL и статусом.

Если перед сервером стоит CDN или балансировщик, IP клиента может быть не реальный. В таком случае ищите идентификатор запроса (например, header или специальный ID в облаке/Cloudflare).

Логи базы данных и медленных запросов: когда WordPress “зависает”

WordPress часто выглядит “сломанным”, хотя по факту проблема в базе: долгие запросы, блокировки, нехватка соединений. Тогда в PHP логах может быть минимум информации, зато в MySQL/MariaDB логи видно больше.

Где смотреть MySQL/MariaDB логи

В зависимости от хостинга и упаковки базы логи могут быть:

  • в файлах в файловой системе (MySQL error log, slow query log)
  • или в панели управления сервисом (например, в managed database)
  • или в облачном логировании контейнера/виртуальной машины

Если есть возможность, включайте slow query log на время диагностики и смотрите запросы, которые выполняются дольше вашего порога. Для чтения важнее не сам порог, а сам факт повторяющихся “длинных” запросов.

Что читать в MySQL slow query log

В slow query логах обычно есть:

  • текст SQL
  • время выполнения
  • количество строк и оценки
  • иногда контекст (сколько раз встречается похожий шаблон)

Практический подход такой:

  • Если в медленных запросах повторяется одна и та же таблица и похожий WHERE, часто виноваты индексы или неоптимальные параметры.
  • Если запросы появляются после конкретного действия пользователя (поиск, фильтры каталога), проверьте параметры вывода и плагины, которые строят SQL.
  • Если медленные запросы идут “пачкой” после обновления плагина, начните с его настроек/версии.

Проблемы с соединениями и блокировками

Ещё один частый класс проблем — не “долгий запрос”, а сбой подключения или блокировки.

Признаки в логах:

  • ошибки уровня “too many connections”
  • отказы при создании/использовании соединений
  • длительное ожидание из-за блокировок (lock waits)

В WordPress это нередко проявляется как тайм‑ауты, когда сервер ждёт ответ от базы.

Если вы видите это в базе, возвращаться к WordPress‑логам бессмысленно, пока не решена причина на уровне СУБД.

Облака и инфраструктура: где искать логи в AWS, GCP и Azure

Когда сайт размещён в облаке (виртуальная машина, контейнер, управляемый сервис), ошибки часто теряются в слоях между пользователем и вашим приложением. Логи в облаке нужны для того, чтобы понять, на каком этапе запрос “сломался”: до вашего контейнера, внутри, после него.

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

AWS: CloudWatch, ELB/ALB и серверные журналы

В AWS чаще всего ищут:

  • CloudWatch Logs — логи приложений, контейнеров, сервисов
  • логи ELB/ALB (access logs) — какие запросы доходили до балансировщика и как отвечал backend
  • логи EC2 (если у вас VM) — через агент в CloudWatch или локально

Что полезно сделать при диагностике:

  • Найти записи по времени вашего инцидента (UTC важно учитывать).
  • Отфильтровать по источнику: отдельный лог‑стрим на экземпляр/задачу.
  • Сопоставить статус кода ответа с причинами в сервисных логах.

Если проблема “периодическая”, чаще всего вы увидите записи с повторяющимися ошибками, а не один разовый всплеск. Тогда отфильтруйте по ключевым фразам, которые похожи на “upstream failure”/“timeout”/“worker terminated”.

GCP: Cloud Logging и журналы балансировщика

В GCP чаще обращаются к:

  • Cloud Logging (раньше Stackdriver) — централизованные логи
  • логам Load Balancing — чтобы понять, дошёл ли запрос до вашего сервиса
  • логам Cloud Run/Compute Engine (зависит от формата запуска)

Ключ к пониманию — смотреть не только сообщение ошибки, но и поля ресурса: service name, instance id, region, severity. В Cloud Logging это часто доступно прямо в интерфейсе.

Если ошибка возникает “раньше” приложения, то в логах вашего WordPress может не быть ничего, а проблема будет видна в логах балансировщика или маршрутизации.

Azure: Monitor, Log Analytics и App Insights

В Azure обычно используют:

  • Azure Monitor + Log Analytics — общие логи и метрики
  • Application Insights — телеметрия приложений (если подключена)
  • журналы виртуальных машин (если WordPress на VM)

Если у вас есть Application Insights, часто можно увидеть зависимости: запросы к базе, ошибки PHP‑обработчика, рост времени ответа. Это помогает быстро понять, что именно стало узким местом.

Если App Insights не настроен, Azure Monitor всё равно полезен: он показывает ошибки на уровне контейнера/сервиса и позволяет отфильтровать события по времени.

Универсальный принцип чтения облачных логов

В облаках почти всегда есть уровни важности:

  • severity (например, Error/Warning/Info)
  • time (в большинстве случаев в UTC)
  • идентификаторы ресурса (instance/task/service)

Ваша задача — не прочитать всё, а выбрать “нить”: один запрос или один диапазон времени, который ведёт к ошибке. Для этого удобнее всего:

  • сузить окно времени
  • отфильтровать по URL/path (если есть поля запроса)
  • найти код статуса и сопоставить его с логами backend

CDN и прокси: Cloudflare и похожие сервисы

Если перед сайтом стоит CDN или прокси, часть ошибок будет видна только там. Например, WAF может заблокировать запрос до того, как он попадёт на ваш сервер. Или CDN отдаст тайм‑аут, если origin долго отвечает.

Какие ошибки обычно проявляются на стороне CDN

Частые сценарии:

  • 4xx из‑за WAF/правил (блокировки по заголовкам, гео, rate limit)
  • 5xx из‑за проблем с origin (тайм‑ауты, ошибки маршрутизации)
  • ошибки кэширования: неверные кэш‑правила или догрузка контента “по кругу”

Если вы видите рост 403/429 — начните с правил безопасности и лимитов. Если рост 5xx — часто origin не успевает ответить или возвращает нестабильные статусы.

Что смотреть в логах и аналитике Cloudflare

У Cloudflare и похожих провайдеров часто есть:

  • логи/сводки событий (в зависимости от тарифа и настройки)
  • аналитика ошибок по статусам
  • идентификатор запроса, который помогает связать повтор.

Ключевая практическая идея: сохраняйте идентификатор конкретного запроса (часто это нечто вроде Ray ID). Затем ищите его в логах CDN и уже после этого сопоставляйте с вашим server/PHP логом по времени и URL.

Если CDN не показывает причину, а ваш origin возвращает 500/502, основная работа всё равно в ваших server и application логах.

Практический сценарий: от симптома к причине за 30–60 минут

Ниже — пошаговый план, который обычно быстрее “погружения в лог наугад”.

Шаг 1. Зафиксируйте окно времени и симптомы

Запишите:

  • точное время начала (лучше с точностью до минут)
  • URL/страницы, где проблема воспроизводится
  • код ответа (500/502/504 и т.д.)
  • происходит ли это для всех пользователей или только для части (анонимы, админка, конкретные страны)

Если есть несколько симптомов, начните с самого частого или с самого “тяжёлого” (обычно 500/504).

Шаг 2. Проверьте доступность сервиса по слоёвому признаку

Сделайте быстрый вывод по коду ответа:

  • 504 — часто тайм‑аут: смотрите nginx/upstream и облачные балансировщики
  • 502 — backend упал/недоступен: смотрите php-fpm/контейнер/сервис
  • 500 — ошибка приложения: смотрите PHP и WordPress debug
  • 403 — доступ/безопасность: смотрите CDN/WAF и настройки сервера

Это не заменяет доказательства, но задаёт правильный набор логов.

Шаг 3. Найдите “первую” запись по времени

Открывайте логи в следующем порядке:

  1. логи веб‑сервера (error_log) по вашему диапазону времени
  2. логи php-fpm или контейнера (если отделены)
  3. логи WordPress (debug.log)
  4. логи базы (если есть признаки тайм‑аутов/тяжёлых запросов)

Ищите по смыслу: статус, URL (если присутствует), тип ошибки (“Fatal error”, “upstream timed out”, “permission denied”).

Шаг 4. Сопоставьте найденную ошибку с контекстом

Когда вы видите stack trace или сообщение, проверьте:

  • на какой файл/линию указывает (иногда это файл плагина)
  • какая функция/метод упоминается
  • есть ли подсказка про версию/зависимость (например, устаревший вызов)

Если ошибка уходит в один и тот же плагин или тему — именно с него начинайте. Дальше это обычно уже вопрос версии, совместимости PHP/WordPress, или конфигурации плагина.

Шаг 5. Проверьте, не виновата ли конфигурация окружения

Частые “не кодовые” причины:

  • обновили PHP и теперь появились предупреждения/несовместимость
  • обновили nginx/php-fpm тайм‑ауты или лимиты
  • поменяли размер контейнера/VM и упали лимиты ресурсов
  • включили новый кэш/оптимизацию, которая меняет поведение

Если ошибка появилась после изменения инфраструктуры — начните с отката изменений или их точечной проверки.

Как читать логи быстрее: полезные признаки и шаблоны

Когда логов много, скорость чтения решает. Есть несколько признаков, которые почти всегда экономят время.

Тайм‑зоны и точность времени

Логи WordPress, сервера и облаков могут иметь разный формат времени. Чаще всего облачные службы используют UTC. Ваш сервер может писать local time.

Мини‑проверка:

  • сравните время в access_log и в облачных событиях
  • убедитесь, что вы понимаете разницу по часовому поясу
  • используйте окно поиска шире на 5–10 минут, если время сомнительно

Если вы ошиблись на час, вы можете “не найти” ошибку там, где она есть.

Код статуса и фаза запроса

Статус HTTP — это след от ответа. Смотрите не только на статус, но и на тип проблемы:

  • “upstream timeout” в nginx — это фаза обработки до ответа
  • “FastCGI” сообщения — связаны с php-fpm и передачей stdout/stderr
  • “permission denied” — файловая система и права

Одна строка в error_log часто более информативна, чем десятки строк из debug.log.

Stack trace: как извлечь главное

В PHP stack trace полезны три места:

  • сообщение об исключении/ошибке (Fatal error/Parse error и т.д.)
  • верхушка трассы (часто там место, где это реально вызвали)
  • первый пользовательский файл, который выглядит как ваш код или код плагина/темы

Если трасса уходит в глубину фреймворков, но в конце упоминается ваш плагин, копайте туда. Не пытайтесь “чинить” внутренности WordPress наугад.

Частые ошибки чтения логов

Несколько типичных ошибок, которые замедляют диагностику:

  • Лечить предупреждения (notice/warning) как первопричину. Иногда они вторичны, а реальная ошибка — фатальная в другом месте.
  • Исправлять всё сразу в production без восстановления. Старайтесь повторять диагностику после каждого изменения.
  • Игнорировать кэш. Если ошибка исчезает после очистки, значит вы имеете дело с кэшированием данных или шаблонов.

Эксплуатация логов в WordPress и облаке: безопасность и ротация

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

Ограничьте диагностику по времени

Правило простое: debug включают на время воспроизведения и затем выключают. Особенно это касается:

  • WPDEBUGDISPLAY
  • любой вывод ошибок в браузер
  • подробные логи, которые могут содержать параметры запросов

Для постоянной диагностики лучше использовать серверные логи и контролируемое логирование без отображения ошибок пользователям.

Следите за размером и ротацией

Большие debug.log и server log могут забить диск. В результате WordPress начнёт падать “по технической причине” — и вы будете диагностировать уже другую проблему.

Проверьте:

  • включена ли ротация логов (logrotate или аналог)
  • куда пишутся логи при росте объёма
  • есть ли алерты на заполнение диска/снижение свободного места

В облаках полезна настройка retention (сколько хранить), иначе логи либо перестанут записываться, либо станут дорогими в хранении.

Не логируйте секреты и персональные данные

WordPress и плагины могут логировать “всё подряд”, особенно если включены дополнительные режимы в сторонних библиотеках. В нейтральной диагностике не нужно тащить в логи:

  • токены
  • куки
  • пароли и ключи API
  • личные данные пользователей

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

Заключение: быстрый план для логи WordPress и облака

Если у вас есть только один подход, он должен быть таким: не ищите ошибку “везде”, а собирайте доказательства по цепочке запрос → сервер → PHP/WordPress → база → облачные слои и CDN.

Порядок, который обычно даёт результат:

  • Зафиксируйте время и URL, определите код ответа.
  • Взгляните на логи веб‑сервера и php-fpm/контейнера в вашем окне времени.
  • Затем проверьте логи WordPress (debug.log через WPDEBUGLOG) и найдите первую ошибку/первопричину.
  • Если есть признаки тайм‑аутов или зависаний, добавьте логи базы (slow query, error log).
  • Если перед вами облачный балансировщик или CDN, сопоставьте событие через их логи/идентификатор запроса.
  • После нахождения причины выключите временные диагностические настройки и проверьте, что проблема не повторяется.

Если хотите, опишите вашу инфраструктуру (хостинг/облако, nginx/Apache, есть ли Cloudflare, где запускается WordPress) и симптом (URL, код ответа, пример строки ошибки). Я подскажу, какие логи в вашем конкретном случае смотреть первыми и как быстро сузить круг причин.

От mpns_by