áááºáá±á¬ááºááŸá¯ áááºážá á±á¬áá·áº áá±ážáá¬ážáá²á· front-end applications ááœá±ááŸá¬ bug ááœá±ááᯠá¡áá±ážááá± á á±á¬áá·áºááŒáá·áºááá¯ááºá á±áááºá JavaScript ááá¯.
Front-end á¡ááá®áá±ážááŸááºážáá»á¬ážááœáẠááŒá¿áá¬áá»á¬ážááᯠááŒá±ááŸááºážááẠááŒáá¯ážá á¬ážáá±áá«áááºá JavaScript ááᯠáááºáááŒá¬áááááºáá±á¬ááºááœáá·áºáááŸááá±á¬á¡áá¯á¶ážááŒá¯áá°áááá±á¬ááºáá¬ááŸá¡á ááŒá¯áá±á¬ááŒá±á¬áá·áºááŸá¯ááºááœá±ážááá¯ááºáááºá ááá¯á·áá±á¬áºá áááºážá á±á¬áá·áº bug áá»á¬ážááᯠá¡áá±ážá០á á±á¬áá·áºááŒáá·áºááẠááŒá áºááá¯ááºáááºá
áá¬ááá¯á¡ááºáááº
á€á¥ááá¬áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááá¯áá«áá áááºááá¯á¡ááºáááá·áºáááº-
Node.js : á¡ááá®áá±ážááŸááºážáá¡á áááºá¡ááá¯ááºážááá¯ááºáá±á¬ á¡ááºá¹áá«áááºááŒáœááºááá±á¬ ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážáá°ážááºá áá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºáá¯á¶ážááœáẠLTS áá¬ážááŸááºáž (8.12.0) ááᯠáá±á«ááºážáá¯ááºáá¯ááºáá¬ážáá«áááºá- áááºážá
á±á¬áá·áº- Sentry áááºáá±á¬ááºááŸá¯ááœáẠá¡áá±á¬áá·áºáá
áºáᯠ(ááẠáá
áºááá»áŸáẠáá»áá¯á·ááœááºážáá»áẠ10 á¡áá á¡ááá²á· ááŸááºáááºážáááºááá¯ááºáááº) ááá¯á·ááá¯áẠááá·áºááœááºážáá¬ážáá±á¬ áá±áááá¯ááºáᬠSentry -
https://github.com/getsentry/onpremise
áááºááá¬áá¬ááœááºááá·áºááœááºážááŒááºážá
Sentry On-Premise ááᯠááá·áºáá¬áá¬ááœáẠááá·áºááœááºážááẠáááºážáááºáž á ááœááºááŒáá·áº ááœá¬ážááá¯ááºáááºá
-
rpm ááá¯áááºáá±á¬ááºááŒá®ážáááºážááá¯á·ááá¯ááá·áºááœááºážáá« -
https://habr.com/ru/post/500632/ -
ááá¬ážáááºááá·áºááœááºážááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áá«-
УÑÑаМПвОÑÑ ÐœÐ° ÑеÑÐ²ÐµÑ docker О docker-compose git clone https://github.com/getsentry/onpremise.git ./install.sh
á á¶áá»áááºáá®á¡áá¯á¶ážááŒá¯ááŸá¯
á áááºááẠáááºáá±á¬ááºááŸá¯áááºááá¯ááºá០á¡áá áºáá áºáá¯ááᯠááá·áºáá«á áááºážá á±á¬áá·áº- áá»áŸá±á¬ááºááœáŸá¬á¡ááœááºá á®áá¶ááááºážá ááá¯áá»ááºáá±á¬áá¬áá¬á áá¬ážááᯠááœá±ážáá»ááºááŒá®ážáá±á¬ááºá áááºááá¯ááºáá±á¬á á¬ááœááºá á¬áááºážáá»á¬ážááᯠáááºáááŸááááºááŒá áºáááºá áá«ááá¯á·ááá á¹á ááŸá¬ áá«ááá¯á·ááœá±ážáááºá JavaScript ááá¯.
áááá¥ááá¬á á á¶áá«á JavaScript ááá¯. á€áá±áá¬ááœáẠááá¯ááºááŸá áºáá¯ááŸááááºá "áááºááá¯" (áááºá¹ááá¬áá«) ááŸáá·áº "á¡ááŸá¬áž" (á¡ááŸá¬áž)á
ááá¯ááºááá¯ááŸáááºááŒá®ážáá±á¬áẠ"áááºááá¯"áá»ááºááŸá¬ááŒááºááẠááŒááºáááºá áááºáá¬ááŒá®áž ááááºááá¯á·ááœá¬ážáááºááŒá áºáááºá ááŒáá¯ážá á¬áž bug ááá¯ááŸá¬ááœá±ááŒá®ážáááºážáá«áááá·áºáááºá áá»áœááºááœááºážáá»ááºááᯠ"áááºážáá" ááŒá®ážáá±á¬ááºá á¡ááŸá¬ážá¡ááœááºážá¡á á®áááºáá¶á á¬ááᯠáááºáá±á¬ááºááŸá¯ááá¯á· ááá¯ááºááá¯ááºáá±ážááá¯á·áááºá áááºážá á±á¬áá·áº.
âErrorâ ááá¯ááºááẠááá·áºá¡á¬áž bug áá áºáá¯ááᯠá¡ááœááºááá° ááŸá¬ááœá±ááá¯ááºá á±áá«áááºá
vanilla/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Vanilla</title>
</head>
<body>
<button id="hello">Hello</button>
<button id="error">Error</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://[email protected]/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>
ááŸááºáá»ááºááœá±:
- Sentry ááᯠCDN áá áºáá¯á០áááºáááºááŒá®áž global variable á¡ááŒá Ạáá±á¬áºáá¯ááºáá¬ážáááºá
- á¡á á±á¬ááá¯ááºážá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á JavaScript ááœáẠSentry ááᯠá áááºáá²á·áááºá
á€á¥ááá¬ááᯠá
ááºážáááºáááºá áá»áœááºá¯ááºááá¯á·ááẠáááºááŒáááºáá±á¬ áááºáá¬áᬠááááºáá±á¬ááºážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá Node.js: http server. ááá¯ááºááááºážáá¬ážááá·áº ááá¯áá«ááá¯á·ááœá¬ážáá«á index.htmlááŸáá·áº ááá±á¬ááºáá¬ááœáẠááááºá
á¬ááá¯ááœáá·áºááẠá¡á±á¬ááºáá«á
á¬ááŒá±á¬ááºážááᯠ(option with disables caching) ááá¯ááºááá·áºáá«á
áááºáá²á·ááá¯á· ááá¯ážáá±á¬ááºáá»á¬áž áááºážáááááºááᯠáá±á¬áºááŒáááºá
ááááá¯á¶áž ááá¯ááºááá¯ááŸáááºáá«á "áááºááá¯".
áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºááœááºážáá»ááºáá áºáá¯ááᯠáááºážáááá±á¬ááŒá±á¬áá·áº áááºážááẠáá±á«áºááá¯ááŸá¯á¡á á¯á¡áá±ážááœáẠáá±á«áºáá¬áááºááá¯ááºáá±á¬ááŒá±á¬áá·áº ááœááºááá¯ážááºááœáẠá á±á¬áá·áºááŒáá·áºááá±áá«á áá«áá±ááá·áº áá»áá±á¬áºááá¯á·á á ááŒá®áž áá±ážááá¯ááºáá¬á áááºážá á±á¬áá·áº áá»áá¯á·ááœááºážáá»ááºáá áºáá¯ááᯠááá¯ááºááá¯ááºááááºážááá¯á·áá«á ááá·áºá¡áá±á¬áá·áºááœáẠáááºážááŸáá·áºáááºáááºááá·áº áááºáá±á·áá»áºáá áºáá¯ááᯠáá»áœááºá¯ááºááá¯á·ááœá±á·ááá«áááºá
ááŸááºáá»ááºááœá±:
- áááºá á¬ááŒá±á¬ááºáž (24) ááŸá¬ bug áá«áááºááá¯áá¬ááᯠááŒá±áá¬áá¶ááá¯ááºáá«áááºá
- ááá¯á·á¡ááŒááºá breadcrumb trail ááẠerror ááŒá áºá á±áá±á¬ browser áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááŒááááºá
áááºážááááá±á¬ ááá¯ážáá±á¬ááºáá»á¬ážááᯠáááºááá¯á·ááŒááááºáááºážá
ááá¯ááºááá¯ááŸáááºáá«á "á¡ááŸá¬áž"
áá»áá¯á·ááœááºážáá»ááºááẠáá±á«áºááá¯ááŸá¯á¡á á¯á¡áá±ážááᯠáá°áá±á¬ááºážáá±á«ááºá á±ááŒá®áž ááœááºááá¯ážááºáá±á«áºááœáẠá¡ááŸá¬ážá¡ááœááºáž áááºáá±á·áá»áºáá áºáᯠááŒááááºá áááºážááŒá®ážáá±á¬ááºá Sentry ááẠáá±á¬ááºáááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážáááŸááá² bug ááᯠá¡ááá¯á¡áá»á±á¬áẠá á±á¬áá·áºááŒáá·áºáááºá
ááŸááºáá»ááºááœá±:
- áááºá á¬ááŒá±á¬ááºáž (30) ááŸá¬ bug áá»á±á¬ááºááœá¬ážáá¬ááᯠááœá±á·ááá¯ááºáááºá
- áá±á«ááºáá¯áá·áºá¡áááºá¡áááºážáááºáž áááŸááá°áž (áá¬ááá¯á·áá² áá¬ážááááºáá°áž)
ááá±á¬áá»ááºáá¯á¶ááŒá¯á¶áá±ážááᯠáááºááá¯á¡á¬ááá¶ááá²á
áá»áœááºá¯ááºááá¯á·áááá±á¬áá»ááºá¡ááœáẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠááááºážááá¯á·ááá¯ááºááá·áº á á¬áá»ááºááŸá¬áá»á¬ážááᯠááááºážáá»á¯ááºáááºážááᯠáááºáááááŒá¯áááá±áááºá áááºážá á±á¬áá·áº; á¡áá°á¡áá®ááŒáá·áº dsn ááŸááºáááºážáá»á¬áž ááŒá¿áá¬ááŸá¬ ááá·áºá á¬áá»ááºááŸá¬á á¡áááºážá¡ááŒá áºáá¯ááºááᯠááŒáá·áºááŸá¯áá°ááá¯ááºážá ááá·áºááœááºážááŸá¯ááᯠááŒááºááá¯ááºáá±á¬ááŒá±á¬áá·áº ááŒá áºáááºá
áááºážááá¯ááŸá±á¬ááºááŸá¬ážáááºá áá»áœááºá¯ááºááá¯á·áááá±á¬áá»ááºááá¯á· á¡ááŸá¬ážá¡ááœááºážá¡á á®áááºáá¶áá»ááºáá»á¬ážááᯠáááºááœááºážááá¯ááºááá·áº ááá¯ááááºážá¡áá±á¡ááœááºááᯠááá·áºáááºááẠááá¯á¡ááºáááºá á€á¥ááá¬ááœááºáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá²á·áááºá localhost (ááŒááºááœááºážá¡áááºááŸááº)á á€ááœá±ážáá»ááºááŸá¯ááᯠáááºáááºáá»á¬ážáááºááºááœáẠá á®á ááºáááºááŸááºáá¬ážáááºá áááºážá á±á¬áá·áº- ááá±á¬áá»ááºá Sentry Project Setting.
áá¯ááºáá±áááºá
áááºááá¯áá¯á¶ážáááá² á ááºážá á¬ážááẠáááºážá á±á¬áá·áº áá»áœááºá¯ááºááá¯á·á á¡ááºááºáá®áá±ážááŸááºážá ááá°áá®áá±á¬ áá¬ážááŸááºážáá»á¬ážááœááºá ááá¯á·áá±á¬áẠáá¬ážááŸááºážáá¶áá«ááºááŒáá·áº á¡ááŸá¬ážáá»á¬ážááᯠá¡ááŸááºá¡áá¬ážááŒá¯ááá·áº ááá¹ááá¬ážáá»áá¯áž ááá¯á¡ááºáá«áááºá
áá±á¬ááºáá¯á¶ážááœááºá áá»áœááºá¯ááºááá¯á·ááŒááºáááºáá¬ážáá±á¬ bug ááẠáá±á¬ááºáá áºááŒáááºáááºááá±á«áºáá¬áá»ááºáá±á¬á·áá² áá»áœááºá¯ááºááá¯á·ááŒááºáááºáá¬ážááá·áºá¡áá¬ááẠá¡áá¯ááºáááŒá áºáᯠáá»áœááºá¯ááºááá¯á·áááºáá«áááºá á¡áá¯á¶ážááŒá¯áá°ááẠá¡ááá®áá±ážááŸááºážá áááºááŸáºáá¬ážááŸááºážá¡áá±á¬ááºážááᯠááœáá·áºáá²á·ááŒááºážáááºáž ááŒá áºááá¯ááºáááºá
ááŒá¿áá¬ááá¯ááŒá±ááŸááºážáááºá áááºááẠidentifier ááá¯ááá·áºááœááºážáááºááá¯á¡ááºáááºá ááœáŸááºáá±áž á áááºáá»áááºááœáẠ(áá¬ážááŸááºážáá»á¬áž) áááºážá á±á¬áá·áº.
vanilla/index.html
...
var RELEASE = '0.1.0';
Sentry.init({
dsn: 'https://[email protected]/1289664',
release: RELEASE,
});
...
áááºážááŒá®ážáá±á¬ááºá á¡ááŸá¬ážá¡ááœááºážá¡á¬ážáá¯á¶ážááᯠá¡áá áºá¡ááŒá Ạá¡ááŸááºá¡áá¬ážááŒá¯áá«áááºá áá¯ááºáá±ááŸá¯ (0.1.0)ááá¯ááá¯áááºááŸá¬á áááºážááá¯á·ááẠáá¯ááºá ááŸááºáááºáá±á¬áá¬ážááŸááºážááŸáá·áº áá»áááºáááºáááºááŒá áºáááºá
ááŸááºáá»ááºááœá±:
- áá¯ááºáá±ááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááẠááá¯ážááŸááºážáá±á¬áááºážáááºážááᯠáá»áœááºá¯ááºááá¯á· ááŸá¬ááœá±ááœá±á·ááŸááá¬ážáá«áááºá
- Sentry á ááá·áºááᯠááá¯áá¯á¶ážááá¯ááºá
á±áááºá
ááŸá¯ááºááœá±ážáááºá áá°ááá¯á·á áá¡áá¯á¶ážááŒá¯ááŸá¯ ááŸáá·áº áá®ážáááºá áœá¬áááºá ááºáá±áá«áááºá GitHub. á€áá¯ááºáá±á¬ááºáá»ááºááẠá¡áá»áá¯á·áá±á¬áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááá¯ááºáá±á¬ááºáá® áá»áœááºááœááºážáá»ááºáá»á¬ážááᯠááŒá±áá¬áá¶ááẠááŒá áºááá¯ááºáá»á±ááŸááááºá
PS áá¯áááá¡ááá¯ááºážá ááá¯ááŸááºáá¬ááá¯á· áá®ážááŒá¬ážááá¯á·á áºááŸá¬ áá±ážáá«áááºá
PS Telegram chat Sentry
PS áá®ááá¯á·á
áºááᯠáá¬áá¬ááŒááºáá¬ážáᬠááœáŸááºááá¯á· áá±á·ááœá¬ážáááºá
source: www.habr.com