Fejlhåndtering ved hjælp af Sentry i frontend-applikationer skrevet i JavaScript: Del 1

Service Sentry giver mulighed for fjernafsøgning af fejl i frontend-applikationer skrevet i JavaScript.

Fejlhåndtering ved hjælp af Sentry i frontend-applikationer skrevet i JavaScript: Del 1

Forsøg på at løse problemer i frontend-applikationer på JavaScript kan vise sig at være en udfordring, da de opstår i brugerens browser, som man ofte ikke har adgang til. Dog, Sentry giver mulighed for fjernafsøgning af fejl.

Her kan downloades løsninger, der blev diskuteret i denne artikel.

Hvad der er nødvendigt

Hvis du vil bruge disse eksempler, vil du have brug for:

  • Node.js: Et multifunktionelt udviklingsværktøj, der ikke er en del af applikationen. Vi downloadede den seneste LTS-version (8.12.0)
  • Sentry: Enten en konto i Sentry-tjenesten (man kan gratis registrere op til 10.000 fejl om måneden) eller en installeret lokal Sentry - https://github.com/getsentry/onpremise

Installation på din server

For at installere Sentry On-Premise på dine servere kan man følge 2 veje

  1. Samle rpm-filer og installere dem - https://habr.com/ru/post/500632/

  2. Brug den officielle installationsprogram:

    Installer Docker og docker-compose på serveren
    git clone https://github.com/getsentry/onpremise.git
    ./install.sh

Standard brug

For at komme i gang, tilføj et nyt Sentry-projekt til applikationen. Efter valg af det relevante sprog vil du modtage dokumentation. I vores tilfælde valgte vi JavaScript.

Det første eksempel - standard JavaScript. Her er der to knapper: «Hello» (Hej) og «Error» (Fejl).

Efter at du har klikket på knappen «Hello», vil skærmen genindlæse, og blokken try vil opdage og fange fejlen. Efter fejlen er «fanget», sendes fejloplysningerne manuelt til tjenesten Sentry.

Knapperne «Error» tillader simpelthen at opdage fejlen.

vanilla / index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Vanilla</title>
</head>
<body>
  <button id="hello">Hej</button>
  <button id="error">Fejl</button>
  <div id="output"></div>
  <script src="https://browser.sentry-cdn.com/4.0.5/bundle.min.js" crossorigin="anonymous"></script>
  <script>
    (function () {
      'use strict';
      Sentry.init({ dsn: 'https://b5bf359072254626aba8e64368e77b7d@sentry.io/1289664' });
      var helloEl = document.getElementById('hello');
      var errorEl = document.getElementById('error');
      var outputEl = document.getElementById('output');
      helloEl.addEventListener('click', handleHelloClick);
      errorEl.addEventListener('click', handleErrorClick);
      function handleHelloClick() {
        outputEl.innerHTML = 'Hello World';
        try {
          throw new Error('Caught');
        } catch (err) {
          Sentry.captureException(err);
        }
      }
      function handleErrorClick() {
        throw new Error('Uncaught');
      }
    })();
  </script>
</body>
</html>

Bemærkninger:

  • Sentry installeres fra CDN og vises som en global variabel
  • Tidligere kørte vi Sentry i vores JavaScript

For at teste dette eksempel kan vi bruge en statisk webserverplatform Node.js: http-server. Gå ind i mappen, der indeholder filen index.html, og indtast (denne mulighed deaktiverer caching) følgende linje for at åbne adressen i browseren http://localhost:8080.

Hvordan fangede fejl vises

Først klikker vi på knappen «Hello».

Fejlhåndtering ved hjælp af Sentry i frontend-applikationer skrevet i JavaScript: Del 1

Vi fangede en fejl, så den vil ikke stige op ad kaldestakken og derfor ikke overvåges i konsollen. Men da vi sender en Sentry fejlrapport manuelt, vil vi se en besked om den i kontoen.

Fejlhåndtering ved hjælp af Sentry i frontend-applikationer skrevet i JavaScript: Del 1

Bemærkninger:

  • Vi kan følge, hvilken linje (24) fejlen optrådte i
  • Desuden viser navigationskæden browserens handlinger, der førte til fejlen.

Hvordan fangede fejl vises

Vi klikker på knappen «Fejl».

Fejlhåndtering ved hjælp af Sentry i frontend-applikationer skrevet i JavaScript: Del 1

Fejlen bobler op gennem opkaldshierarkiet og dermed vises fejlhåndteringsbeskeden på konsollen. Herefter monitorerer Sentry automatisk fejlen uden yderligere handling.

Fejlhåndtering ved hjælp af Sentry i frontend-applikationer skrevet i JavaScript: Del 1

Bemærkninger:

  • Vi kan se, hvilken linje (30) fejlen gik tabt i
  • Der er ikke forudset en navigationskæde (jeg forstår ikke helt hvorfor)

Hvordan sikrer man projektets sikkerhed

Måske har du bemærket måden, vi kontrollerer sider, der kan sende fejllogs til vores projekt Sentry; ved hjælp af dsn optegnelser. Problemet er, at enhver, der ser kildekoden på din side, kan se dette.

For at undgå dette skal antallet af domæner, der kan sende fejllogs til vores projekt, begrænses. I dette eksempel har vi brugt localhost (localhost). Denne mulighed kan konfigureres i indstillingsfanen Sentry-projektet, Sentry Projektindstilling.

Fejlhåndtering ved hjælp af Sentry i frontend-applikationer skrevet i JavaScript: Del 1

Udgivelser

Hvis vi tænker på, hvordan man bruger Sentry i forskellige variationer af vores ansøgning, kræves der en slags mekanisme, der markerer fejl med versionsnummer.

Det er ikke hensigtsmæssigt, hvis en fejl, vi har rettet, dukker op igen, mens vi tror, at det, vi har rettet, ikke fungerede. Der kan også være tilfældigt, at brugeren har kørt en ældre, cachet version af ansøgningen.

For at løse problemet skal identifikatoren for udgivelsen (versionen) skrives ved opstart Sentry.

vanilla / index.html

...
var RELEASE = '0.1.0';
Sentry.init({
  dsn: 'https://b5bf359072254626aba8e64368e77b7d@sentry.io/1289664',
  release: RELEASE,
});
...

Herefter vil alle nye fejl blive markeret som release (0.1.0), hvilket betyder, at de vil blive knyttet til den rette kodeversion.

Fejlhåndtering ved hjælp af Sentry i frontend-applikationer skrevet i JavaScript: Del 1

Bemærkninger:

  • Vi har gennemgået en simpel måde at bruge udgivelser på
  • Sentry giver mulighed for at anvende mere komplekse dem brug af, som er tæt knyttet til GitHub. Denne funktion muliggør overvågning af fejl før bestemte handlinger udføres.

P.S. Den anden del er længere, så den vil blive i et separat indlæg.

P.S. Telegram chat Sentry https://t.me/sentry_ru

P.S. Jeg glemte at nævne, at dette er en oversættelse af indlægget https://codeburst.io/sentry-error-reporting-by-example-part-1-999b2df11556

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster