Sentry 설정
Sentry에 로그인을 하면(처음에는 설치할 때 만든 슈퍼유저 계정으로) 일단 팀을 설정해야 한다. 팀은 당연히 여러개 만들 수 있고 계정을 만들어서 각 팀에 구성원으로 포함시킬 수 있다.
팀을 구성한 다음에는 프로젝트를 생성한다. 한 팀이 여러 프로젝트를 가질 수 있으므로 당연히 팀 하위에 프로젝트도 여러개 만들 수 있다. 각 조직에 맞게 팀을 구성해서 그 하위에 프로젝트를 생성하면 될 것이다.
프로젝트를 생성할 때는 해당 프로젝트의 플랫폼을 구성해야 한다. (플랫폼이 달라도 로깅은 할 수 있는 것으로 보인다.)
Sentry에 Stack Trace 로깅하기
전에도 얘기했지만 Sentry는 Cetralized Logging에서도 특히 Error 로깅에 집중하고 있다.(물론 일반 메시지도 볼 수 있다.) 서버에서 로깅에는 아주 다양한 종류가 있지만 개발자에게 특히 민감한 내용은 Error에 대한 로깅이고 Strack Trace에 대부분의 정보가 있으므로 특히 중요한다. 로그를 수집하는 도구를 많이 써보지는 않았지만 경험상 해보면 로그파일에서 Strace Trace를 찾는 것은 꽤 힘든 일이고 Stack Trace는 여러줄로 출력이 되기 때문에 grep 같은걸로 찾기도 쉽지 않은데 Sentry가 이런 부분을 해결해 준다. Sentry로 로깅을 보내는 클라이언트를 어플리케이션에 설정해야 하는데 이 클라이언트의 이름이 Raven이고 현재 Python, PHP, Ruby, JavaScript, Java, node.js, iOS, C#, R을 지원하고 있다. 일부 언어의 Raven은 Sentry에서 직접 관리하고 있고 일부는 개인 개발자들이(Sentry랑 관계된 사람들인지는 모르지만) 관리하고 있다. 모든 언어를 다 볼 수는 없으므로 간단히 Java와 node.js만 살펴보자.
Java 어플리케이션에서 Log4j로 로깅하기
자바에서는 raven-java란 모듈을 사용하고 있고 직접 클라이언트객체를 생성해서 사용하거나 Log4j나 Logback등에 연결해서 사용할 수 있다. 아직 raven-java가 메이븐 센트럴저장소에 등록되어 있지 않기 때문에 로컬저장소에 등록해서 사용해야 한다. (이슈가 열려서 진행중이긴 한것 같은데 등록은 아직 안되었따.)
Sentry에서 프로젝트 화면에 가면 위와같이 각 언어별 설정방법을 볼 수 있다.(참고로 Java의 경우 위 방법은 잘못되었으므로 raven-java 저장소를 참고해야 한다.) Raven 클라이언트를 생성해서 코드로 직접 로깅을 할 수도 있지만 일반적으로는 Log4j나 Logback을 이용해서 로깅하므로 Log4j로 설정하는 방법을 보겠다. 자세한 내용은 raven-java 저장소에 나와있다.
$ git clone https://github.com/kencochrane/raven-java.git
$ cd raven-java
$ mvn clean install
로컬에서 raven-java 저장소를 클록받아서 메이븐 인스톨을 실행해주면 되고 혹시 테스트가 실패해서 등록이 되지 않는다면 -Dmaven.test.skip 옵션을 지정해 주면 테스트를 건너뛸 수 있다.
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>net.kencochrane</groupId>
<artifactId>raven-log4j</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
</dependencies>
로컬에 등록이 되었으면 메이븐을 사용하는 경우 위와같이 Log4j에 대한 의존성을 추가해주면 된다.(log4j를 쓰지 않는다면 raven-java의 가이드를 참고하면 된다.)
log4j.rootLogger = DEBUG, sentry
log4j.appender.sentry=net.kencochrane.raven.log4j.SentryAppender
log4j.appender.sentry.sentryDsn=http://public:private@host:port2
위처럼 log4j.properties에 설정해 주면 된다. sentryDsn은 Sentry의 프로젝트 설정에 나온 내용을 사용하면 되고 각 프로젝트별로 고유의 URL이 자동으로 생성된다.
이제 로거로 오류를 출력하면 위처럼 Sentry 페이지에서는 같은 메시지의 오류를 자동으로 하나로 묶어주고 시간대별로 발생한 객수를 그래프로 보여준다. 스택트레이스가 같이 나오기 때문에
node.js 어플리케이션에서 로깅하기
$ npm install raven
node.js에서는 raven-node모듈을 사용한다. npm 저장소에 등록되어 있으므로 npm 명령어를 사용해서 설치할 수 있다.
var raven = require('raven')
, client = new raven.Client('http://public:private@host:port/3');;
client.captureError(new Error('error occured!!'));
raven을 설치했으면 Dsn URL을 입력해서 새로운 클라이언트 객체를 생성해고 해당 클라이언트로 오류를 보내주면 된다. node.js의 오류객체를 그대로 보내주면 된다.
Sentry에 가면 해당 오류에 대한 정보가 나타나고 스택트레이스와 관련부분의 소스코드(노드의 경우)도 볼 수 있고 설치된 패키지 정보고 함께 볼 수 있다.
Sentry의 좋은 점
- 이쁘다... 깜끔한 디자인이라 보기 좋다.
- 자동으로 관련된 오류를 그룹핑해주고 언제 오류가 발생했는지 얼마나 발생했는지 함께 볼 수 있다.
- 스택트레이스는 Sentry에서 바로 볼 수 있기 때문에 간단한 오류때문에 서버에 들어가서 로그를 뒤적거려야 하는 귀차니즘을 많이 줄여준다.
- 자동으로 서버, 로거, 로그레벨등에 태그를 지정하기 때문에 분류별로 찾아보기도 쉽다.
- 오류자체도 하나의 Issue처럼 처리를 해서 처리된 이슈로 표시할 수 있다.(우측 상단에 체크표시가 있다.) 모든 오류가 그런것은 아니지만 오류는 버그이므로 처리해야할 이슈인데 이런 부분을 깔끔히 제공하고 있다.
- 오류가 한번에 수십개 발생해도 노티피케이션은 딱 한번만 보내준다. 물론 오류의 종류가 다르다면 개별로 다 노티피케이션을 보내준다.(정확한 시간은 알 수 없지만 같은 오류도 일정시간이 지나서 발생하면 다시 보내준다.)
Comments