SENTRY

제이밍·2022년 12월 26일
1
post-custom-banner

what is sentry

sentry : a soldier who guards a place, usually by standing at its entrance
주로 입구에 서서 장소를 지키는 군인

sentry.io

  • 모니터링 플랫폼
  1. 에러 추적
  • 무료로 이용 가능한 오픈 소스(sdk)
  • 오류를 추적하는 대쉬보드와 같은 서비스를 사용하려면 유료서비스 이용
  • Sentry의 SDK는 런타임 환경에 연결되어 자동으로 오류를 보고합니다.
  1. 성능 측정
  • 초반의 센트리는 오류를 추적하는 것에 집중했으나
  • 나중에는 성능을 측정해 주는 기능까지 추가되었다.

새 프로젝트 시작하기

Set up sentry

  1. dsn: DSN 은 이벤트를 보낼 위치를 SDK에 알려줍니다.
  2. debug: 디버그 모드는 켜거나 끕니다
  3. integrations: 플랫폼 SDK별 통합 구성 설정 [new BrowserTracing()],
    이벤트를 선택적으로 수정해서 데이터를 보내는 beforeSend 옵션 제공
  4. release
    릴리즈를 설정하여 버전별 오류 추적을 용이하게 합니다.
    다이다믹하게 설정 할 수 도 있습니다 process.env.npm_package_version
  5. tunnel
    광고 차단기를 우회하거나 Sentry로 전송되는 이벤트를 보다 세밀하게 제어할 수 있습니다
  6. environment
    환경 설정 development, production...
  7. TracesSampleRate
    0~1 사이값 으로 성능을 어느정도 캡쳐링 할 것인지 지정 할 수 있습니다.
    0 : 전송되지 않는다
    1 : 모든 추천이 센트리로 전송된다.

추적되는 양 만큼 지불해야 한다.
값을 낮게 설정 할 수록 지불해야하는 양이 낮아진다.

개발자도구에서 확인하기

실시간성능 체크


https://github.com/sunhwa508/sentry

captureException

예외로 처리할 이벤트에 대해서는 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");

이슈 그룹화(Issue Grouping) 하기

모든 이벤트에는 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을 활용해 고도화 한 예시

ETC

임계값
하나의 변수 x가 어느 값이 되었을 때 특이한 상태나 급격한 변화가 일어나 임계 상태에 있을 때의 x값

TPM average transation per minute

P50 트랜젝션의 50%가 해당 임계값을 초과함을 의미

profile
모르는것은 그때그때 기록하기
post-custom-banner

0개의 댓글