Разработка SEO оптимизированных высокопроизводительных фронтенд приложений на базе 1С-Битрикс.

Мониторинг ошибок в Битриксе с помощью Zabbix

Артем Житник

Артем Житник

Программисты люди занятые (или ленивые), поэтому они выкатывают проект и переключаются к другим задачам. Если что-то не работает - заказчик сообщит, а ему соответственно пожалуются пользователи. По хорошему, периодически нужно заглядывать в логи ошибок Битрикса на предмет наличия новых записей. Такой рутиной мало кто занимается.

А что если считать ошибки и этот счетчик передавать в уже настроенный мониторинг Zabbix? Добавляем highloadblock ErrorCounter с одним единственным полем "UF_CREATED" типа дата/время со значением по умолчанию - текущее время. Создаем кастомный обработчик ошибок:

namespace MyNamespace\Monitoring;

use Bitrix\Main\Diag\FileExceptionHandlerLog;
use Bitrix\Main\Loader;
use Bitrix\Main\ORM\Data\DataManager;
use Exception;
use Bitrix\Highloadblock\HighloadBlockTable;

Loader::includeModule("highloadblock");

class ExceptionCounter extends FileExceptionHandlerLog {

    /**
     * @param Exception $exception
     * @param int       $logType
     */
    public function write($exception, $logType) {
        parent::write($exception, $logType);

        self::getCounterDataClass()::add([]);
    }

    /**
     * @return DataManager|string
     */
    public static function getCounterDataClass() {
        return HighloadBlockTable::compileEntity("ErrorCounter")->getDataClass();
    }

}

В .settings.php прописываем наш класс в свойство class_name:

  'exception_handling' => 
  array (
    'value' => 
    array (
      'debug' => true,
      'handled_errors_types' => 4437,
      'exception_errors_types' => 4437,
      'ignore_silence' => false,
      'assertion_throws_exception' => true,
      'assertion_error_type' => 256,
      'log' => 
      array (
        'settings' => 
        array (
          'file' => 'error.log',
          'log_size' => 1000000,
        ),
        'class_name' => 'MyNamespace\Monitoring\ExceptionCounter',
      ),
    ),
    'readonly' => false,
  ),

После этого, при возникновении исключения, в счетчик записывается значение. Лог также пишется, как раньше.

Далее дело техники. Делается запрос выбора записей за последние сутки, считается количество результатов. Это и будут данные для наблюдения в Zabbix. Если значение 0, значит ошибок за день не было, если больше 0 - показывать триггер

Если есть сообщение - иду в логи смотреть что произошло, нет - курю бамбук. Момент фильтрации ошибок для счетчика опустил. Бывает что не нужно фиксировать проблему, например если код выполняется администратором из консоли PHP в админке. Отправку данных счетчика в Zabbix выполнил через расширение GraphQL схемы.

Любопытно посмотреть график возникновения ошибок за период:

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

Связанные публикации:

©2024 ReactiveBx работает на «1С-Битрикс: Управление сайтом» и Next.js