sentry
: a soldier who guards a place, usually by standing at its entrance
주로 입구에 서서 장소를 지키는 군인
새 프로젝트 시작하기
dsn
: DSN 은 이벤트를 보낼 위치를 SDK에 알려줍니다.debug
: 디버그 모드는 켜거나 끕니다integrations
: 플랫폼 SDK별 통합 구성 설정 [new BrowserTracing()],beforeSend
옵션 제공release
process.env.npm_package_version
tunnel
environment
TracesSampleRate
0~1 사이값
으로 성능을 어느정도 캡쳐링 할 것인지 지정 할 수 있습니다.추적되는 양 만큼 지불해야 한다.
값을 낮게 설정 할 수록 지불해야하는 양이 낮아진다.
실시간성능 체크
https://github.com/sunhwa508/sentry
예외로 처리할 이벤트에 대해서는 captureException
를 사용하여
오류에 대한 메세지를 Sentry에 수동으로 보고하는데 유용하다.
try {
aFunctionThatMightFail();
} catch (err) {
Sentry.captureException(err);
}
Breadcrumbs
이동 경로를 사용하여 문제 이전에 발생한 이벤트의 흔적을 만듭니다.
Sentry.addBreadcrumb({
category: "auth",
message: "Authenticated user " + user.email,
level: "info",
});
// Scope 레벨로 관리하고 싶다면
Sentry.configureScope(function(scope) {
scope.setLevel("warning");
});
// 이벤트 별로 수집하고 싶다면
Sentry.withScope(function(scope) {
scope.setLevel("info");
// The exception has the event level set by the scope (info).
Sentry.captureException(new Error("custom error"));
});
// 범위 없이 에러를 캡쳐하고 싶다면
//the Event level will have their previous value restored
Sentry.captureMessage("this is a debug message", "debug");
모든 이벤트에는 Fingerprinting
가 존재합니다.
자동으로 수집된 데이터를 기반으로 그룹화되기 때문에 예상한 것과 다르게 보여질 수 있습니다.
아래와 같이 조건을 설정해 주면 명확하게 그룹화 할 수 있습니다.
function makeRequest(method, path, options) {
return fetch(method, path, options).catch(function(err) {
Sentry.withScope(function(scope) {
// group errors together based on their request and response
scope.setFingerprint([method, path, String(err.statusCode)]);
Sentry.captureException(err);
});
});
}
웹메인 Fingerprinting
을 활용해 고도화 한 예시
임계값
하나의 변수 x가 어느 값이 되었을 때 특이한 상태나 급격한 변화가 일어나 임계 상태에 있을 때의 x값
TPM
average transation per minute
P50
트랜젝션의 50%가 해당 임계값을 초과함을 의미