Поиск по сайту:

Как использовать Sentry и GitLab для перехвата ошибок React


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

GitLab — это платформа DevOps на основе Git для управления всем жизненным циклом разработки программного обеспечения. GitLab может интегрироваться с Sentry для отображения перехваченных ошибок. В этой статье мы будем использовать эти два сервиса, чтобы опережать проблемы в приложении React.

Подготовка

У GitLab и Sentry есть варианты как самостоятельного хостинга, так и SaaS. Шаги, описанные в этом руководстве, применимы к обоим вариантам. Предположим, что у вас уже есть проект React, готовый к использованию в вашем экземпляре GitLab.

Войдите в Sentry и нажмите кнопку «Создать проект» в правом верхнем углу. Нажмите «Реагировать» под заголовком «Выберите платформу». Это позволяет Sentry адаптировать примеры кода к вашему проекту.

Выберите, когда получать оповещения, используя параметры в разделе «Установите настройки оповещений по умолчанию». Выберите «Оповещать меня о каждой новой проблеме», чтобы получать электронное письмо каждый раз, когда регистрируется ошибка. Опция «Когда их больше» отфильтровывает шум, создаваемый повторяющимися событиями в заданном временном окне.

Дайте вашему проекту имя в поле «Имя проекта». Нажмите «Создать проект», чтобы завершить настройку.

Добавление Sentry в вашу кодовую базу

Теперь вам нужно интегрировать Sentry с вашим кодом React. Добавьте библиотеку Sentry в зависимости вашего проекта с помощью npm:

npm install @sentry/react

Вам нужно как можно скорее инициализировать Sentry в JavaScript вашего приложения. Это дает Sentry видимость ошибок, возникающих на ранних этапах жизненного цикла React. Добавьте загрузочный скрипт Sentry перед первым вызовом ReactDOM.render(). Обычно это в index.js:

import App from "./App.js";
import React from "react";
import ReactDOM from "react-dom";
import * as Sentry from "@sentry/react";
 
Sentry.init({
    dsn: "my-dsn"
});
 
ReactDOM.render(<App />, document.getElementById("react"));

Замените my-dsn на DSN, который Sentry отображает на экране создания вашего проекта. DSN однозначно идентифицирует ваш проект, чтобы служба могла правильно атрибутировать события.

Захват ошибок

Sentry автоматически фиксирует и сообщает о необработанных ошибках JavaScript. Хотя он не может предотвратить сбой, он позволяет узнать, что что-то пошло не так, до того, как появится отчет пользователя.

Вот пример App.js:

import React from "react";
 
export default () => {
    const data = null;
    return data.map((val, key) => {
        <h1 key={key}>{val}</h1>;
    });
};

Этот код не работает — для data установлено значение null, поэтому свойство map будет undefined. Мы пытаемся вызвать data.map() независимо от того, что приложение аварийно завершает работу. Вы должны увидеть проблему в Sentry.

Проблемы Sentry включают в себя как можно больше данных об ошибке. Вы можете увидеть URL-адрес страницы, а также информацию об устройстве пользователя. Sentry автоматически объединит повторяющиеся задачи вместе. Это поможет вам увидеть, было ли событие разовым или регулярным явлением, влияющим на нескольких пользователей.

Sentry автоматически загружает исходные карты JavaScript, когда они доступны. Если вы используете create-react-app, исходные карты автоматически генерируются с помощью npm run build. Убедитесь, что вы скопировали их на свой веб-сервер, чтобы Sentry мог их найти. Вы увидите красивые трассировки стека из оригинального исходного кода вместо запутанного стека, созданного минимизированным выходом сборки.

Вы можете пометить ошибки Sentry как разрешенные или проигнорированные после того, как они будут устранены. Вы найдете эти кнопки под заголовком проблемы и на странице обзора проблем. Используйте Resolved, если вы уверены, что проблема устранена. Игнорируется для случаев, когда вы не собираетесь устранять основную причину. На сайтах React это может быть связано с ошибками, вызванными старыми версиями браузера.

Границы ошибки

Границы ошибок React позволяют отображать резервный пользовательский интерфейс, когда в компоненте возникает ошибка. Sentry предоставляет собственную оболочку ошибок. Это отображает резервный пользовательский интерфейс и регистрирует обнаруженную ошибку в Sentry.

import * as Sentry from "sentry";
 
export default () => {
    const data = null;
    return (
        <Sentry.ErrorBoundary fallback={<h1>Something went wrong.</h1>}>
            {
                data.map((val, key) => {
                    <h1 key={key}>{val}</h1>;
                });
            }
        </Sentry.ErrorBoundary>
    );
};

Теперь вы можете отображать предупреждение для пользователей при возникновении ошибки. Вы по-прежнему будете получать отчет об ошибках в своем проекте Sentry.

Добавление интеграции с GitLab

У интеграции GitLab и Sentry есть две стороны. Во-первых, в проектах GitLab есть функция «Отслеживание ошибок», которая отображает список ошибок Sentry. Вы можете пометить ошибки как разрешенные или проигнорированные в GitLab. Вторая часть включает в себя подключение Sentry к GitLab. Это позволяет Sentry автоматически создавать задачи GitLab при регистрации новой ошибки.

Давайте сначала посмотрим на экран отслеживания ошибок GitLab. Вам нужно будет создать ключ Sentry API. Нажмите на свое имя пользователя в левом верхнем углу интерфейса Sentry, а затем на ключи API в меню. Нажмите «Создать новый токен» в правом верхнем углу.

Добавьте следующие области маркеров:

  • оповещения:прочитано
  • оповещения:напишите
  • событие:администратор
  • событие:прочитано
  • событие: запись
  • проект:читать

Это позволяет GitLab читать и обновлять ваши ошибки Sentry.

Затем перейдите к своему проекту GitLab. Нажмите «Настройки» в боковом меню, а затем «Операции». Разверните раздел «Отслеживание ошибок». Вставьте свой токен аутентификации Sentry в поле «Токен аутентификации» и нажмите «Подключиться». Если вы используете собственный экземпляр Sentry, вам также необходимо настроить поле «Sentry API URI» в соответствии с URI вашего сервера.

В раскрывающемся списке «Проект» появится список ваших проектов Sentry. Выберите правильный проект и нажмите «Сохранить изменения». Теперь вы готовы использовать отслеживание ошибок в GitLab.

Щелкните Операции > Отслеживание ошибок на левой боковой панели. Вы увидите список ошибок Sentry. По умолчанию он отфильтрован как нерешенные проблемы. Это можно изменить с помощью раскрывающихся списков в правом верхнем углу. Щелкните ошибку, чтобы просмотреть подробную трассировку стека, не покидая GitLab. Есть кнопки для игнорирования, устранения и преобразования проблемы в GitLab. После того, как вы открыли проблему GitLab, вы можете назначить этот элемент члену команды, чтобы ошибка была устранена.

Теперь вы можете добавить второй компонент интеграции — ссылку из Sentry обратно в GitLab. Нажмите «Настройки» на боковой панели Sentry, а затем — «Интеграции». Найдите GitLab в списке и нажмите фиолетовую кнопку «Добавить установку» в правом верхнем углу. Нажмите «Далее», чтобы просмотреть информацию об установке.

Вернувшись в GitLab, щелкните значок пользователя в правом верхнем углу, а затем «Настройки». Нажмите «Приложения» в меню слева и добавьте новое приложение. Используйте данные, показанные Sentry во всплывающем окне настройки установки.

GitLab отобразит идентификатор приложения и секретный ключ. Вернитесь во всплывающее окно Sentry и введите эти значения. Добавьте URL-адрес своего сервера GitLab (gitlab.com для GitLab SaaS) и введите относительный путь URL-адреса к вашей группе GitLab (например, my-group). Интеграция не работает с личными проектами.

Нажмите фиолетовую кнопку «Отправить», чтобы создать интеграцию. Sentry теперь сможет отображать информацию GitLab рядом с вашими ошибками. Это включает в себя фиксацию, вызвавшую ошибку, и трассировку стека, ссылающуюся на файлы GitLab. Пользователи Sentry на платных планах могут связывать проблемы GitLab и Sentry друг с другом.

Отключение Sentry в разработке

Вам не обязательно использовать Sentry при локальном запуске приложения в процессе разработки. Не вызывайте Sentry.init(), если вы хотите работать с отключенным Sentry. Вы можете проверить наличие локальной переменной среды и отключить Sentry, если она установлена.

if (process.env.NODE_ENV === "production") {
    Sentry.init({
        dsn: "my-dsn"
    });
}

NODE_ENV устанавливается автоматически с помощью create-react-app. Производство жестко закодирует переменную в production. Вы можете использовать это, чтобы выборочно включить Sentry.

Включение профилирования производительности

Sentry также может профилировать производительность браузера вашего приложения. Хотя это не является основной темой этой статьи, вы можете настроить трассировку с помощью нескольких дополнительных строк в инициализации вашей библиотеки Sentry:

npm install @sentry/tracing
import {Integrations} from "@sentry/tracing";
 
Sentry.init({
    dsn: "my-dsn",
    integrations: [new Integrations.BrowserTracing()],
    tracesSampleRate: 1.0
});

Теперь вы сможете просматривать данные о производительности в своем проекте Sentry. Это может помочь вам определить медленно работающий код в рабочей среде.

Заключение

Sentry позволяет находить и исправлять ошибки до того, как пользователи сообщат о них. Вы можете получать оповещения в режиме реального времени о возникновении проблем в производстве. Трассировки стека и данные браузера отображаются в каждой задаче, что дает вам немедленную отправную точку для решения.

Объединение Sentry с GitLab обеспечивает еще более тесную интеграцию с процессом разработки программного обеспечения. Если вы уже используете GitLab для управления проектами, добавление интеграции Sentry позволит вам управлять оповещениями в GitLab и создавать задачи GitLab для новых ошибок Sentry.




Все права защищены. © Linux-Console.net • 2019-2024