Sentry.io: типы ошибок

Sentry.io: типы ошибок

14 мая 2024


Автор: Мишаков Пётр
Ошибки при обработке запросов могут привести к негативному отношению со стороны покупателей на сайте или сотрудников CRM вашей компании. С помощью модуля «Sentry.io: трекер ошибок и монитор производительности» вы сможете записывать ошибки, группировать схожие и получать уведомления о появлении проблем. Информация об ошибке поможет разработчикам сайта исправить проблему и сформировать обращение в техподдержку 1С-Битрикс.

Особенностью модуля от компании «Техдиректор» является поддержка стандартного окружения BitrixVM. Вам не потребуется вносить изменения в конфигурацию сервера с современными версиями 1С-Битрикс для мониторинга ошибок.

Сегодня разберем примеры ошибок, с которыми можете столкнуться.


Переход к PHP 8

Фото 1: «Sentry.io: типы ошибок»

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

Примеры сообщений:
  • array_keys(): Argument #1 ($array) must be of type array, null given
  • count(): Argument #1 ($value) must be of type Countable|array, null given
  • array_key_exists(): Argument #2 ($array) must be of type array, null given
  • in_array(): Argument #2 ($haystack) must be of type array, null given
  • array_merge(): Argument #2 must be of type array, bool given
  • Cannot access offset of type string on string
Для решения потребуется адаптировать код шаблона к современным требованиям. 


Падение базы данных и кеша

Фото 2: «Sentry.io: типы ошибок»
При достижении ограничения оперативной памяти и объема дискового пространства процесс базы данных MySQL может стать недоступен, что приведет к фатальному исключению создания страницы. При использовании кеша Memcached или Redis в случае падения сайт продолжит работу, но время формирования создания страницы увеличиться.

Примеры сообщений:
  • Mysql connect error [localhost]: (2002) Connection refused
  • Mysql connect error [localhost]: (2006) MySQL server has gone away
  • Memcache::pconnect(): Can't connect to unix:///tmp/memcached.sock:0, Connection failed: Connection refused (111)
Для решения потребуется проанализировать распределение ресурсов сервера, внести изменения в конфигурацию. 


Ошибки призраки

Исключения при попытке записи ошибки в лог и при окончании буферизации могут отображаться в виде пустой страницы, что приводит к сложностям в отладке. Проблему обновления пакета psr/log разобрали в отдельной статье.

Сообщение об ошибке «ob_start(): Cannot use output buffering in output buffering display handlers» часто является свидетельством двух ошибок:
  • Использования буферизации внутри Отложенных функций или обработчиках события OnEndBufferContent.
  • Исключение на странице, которое вызвало экстренное завершение буферизации.
Примеры сообщений:
  • Declaration of Bitrix\Main\Diag\Logger::log($level, Stringable|string $message, array $context = []): void must be compatible with Psr\Log\LoggerInterface::log($level, $message, array $context = []) in ..../bitrix/modules/main/lib/diag/logger.php
  • ob_start(): Cannot use output buffering in output buffering display handlers