Sentry로 에러 로깅 자동화하기
앱이든 서버든, 서비스를 구현해서 사용하다보면 오류를 추적해서 해결해야 할 일이 매우 잦다.
문제를 해결하려면 당연히 로그를 남겨야 하고,,, 단순한 정보성 로그와 오류 로그 등을 잘 구분해서 관리해줘야 하고, 은근히 신경쓸만한 부분이 많다.
센트리는 이런걸 편리하게 처리할 수 있게 도와주는 친구다.
센트리는 직접 구축할 수도 있고 관리형 서비스를 쓸 수도 있는데, 관리형도 제한적이지만 무료 플랜으로 사용이 가능하다. 무료 플랜은 한달에 10000개까지의 이벤트를 사용할 수 있게 해준다.
https://sentry.io/welcome/
들어가서 회원가입과 로그인을 잘 해보자.
그리고 최초로 들어가거나, 프로젝트 탭에서 생성 버튼을 누르면
사용중인 시스템 종류를 고를 수 있다.
언어, 시스템마다 오류 스택을 표현하는 방식이 달라서 구분해놓은 것 같다.
여기서 사용중인걸로 원하는 만큼 만들어서 사용하면 된다.
Express(Node.js)에서 사용하기
Express를 골라서 프로젝트를 생성한다.

그럼 어떻게 세팅하면 된다고 친절하게 다 알려준다.
저거 따라서 쳐주면 되고,
모듈도 이렇게 2개 깔아주면 된다.

그럼 이렇게 오류가 발생할때마다
자동으로 로그를 기록해준다.
그럼 해당 프로젝트 목록의 이슈 탭에서 오류를 확인할 수 있다.

저기로 들어가면 오류에 대한 상세 정보를 볼 수 있다.

오류가 난 소스도 추적을 해주고

요청 정보나 기타 등등, 쓸만한 정보들은 대충 다 수집해준다,

그런데 저 방식대로라면 예외가 폭발하는 것에만 대응이 되지, 예외를 직접 잡아서 처리할 경우에는 동작하지 않을 것이다.
그래서 보통은 예외처리를 하면서 그 예외를 던져주는 식으로 사용하게 될 것이다.
이런 식으로만 하면 된다.

그럼 잘 기록될 것이다.

그리고 그냥 임의로 메세지를 보내서 단순 로그를 쌓는 용도로도 활용할 수 있겠다,

그럼 비슷하게 잘 보여줄 것이다.

React나 React Native의 경우에도 초기 설정만 잘 따라하고 나머지는 동일한 원리로 사용하면 된다.
Rust에서 사용하기 (with Actix)
러스트에서 사용하는 것도 그렇게 어렵지 않다.
종속성에 sentry 크레잇을 추가하고

공식문서에서 시키는대로 초기화를 한번 시켜주면 된다.

그러면 panic이 발생할때마다 그걸 감지해서 자동으로
로그를 찍어준다.
들어가면 패닉 메세지와 패닉이 발생한 스택트레이스 등을 확인할 수 있을 것이다.

그리고 에러를 예외처리와 함께 기록하고 싶다면 다음과 같이 capture_error로 에러 객체를 넣어주면 된다.

그냥 메세지를 보내고 싶다면 capture_message로 메세지를 넣어주면 된다.


참으로 기분좋게도 sentry에서 actix-web까지 지원을 하더라.
sentry_actix 크레이트를 받아서 wrap으로 그 객체만 넣어주면 된다.

그럼 이제 웹 관련 요청 정보까지 알아서 기록을 해줄 것이다.

대충 이런식으로 쓰면 된다.
장점1: 중복삽입 관리
로그를 무작정 때려넣기만 한다면 로그가 온통 뒤섞여서 뭐가 뭔지 구분이 안될 것이다.
센트리는 똑똑하게도 거의 동일한 형태의 오류면 같은 오류라고 판단해서 하나의 오류로 묶어버린다.
이러면 같은 오류가 10번이나 발생했다는 뜻이다.
장점2: 오류 해결 관리
오류 로그마다 해결 여부를 체크해서 관리하거나 무시하게 할 수도 있다.

그리고 오류에 대해 메세지를 남기고, 적극적으로 소통을 하며 히스토리를 남길 수도 있다.

참조
https://engineering.linecorp.com/ko/blog/log-collection-system-sentry-on-premise/
https://medium.com/aha-official/%EC%95%84%ED%95%98-rest-api-%EC%84%9C%EB%B2%84-%EA%B0%9C%EB%B0%9C-14-3819ec9e90e9
https://docs.sentry.io/platforms/rust/
https://docs.sentry.io/platforms/rust/guides/actix-web/