지난 글에서 이번 주 스프린트 주제와 목적을 다뤘다.
이번 글에서는 로깅 시스템에 도입할 솔루션을 탐색하는 과정에서 수집한 자료를 정리했다.
오늘은 로깅 시스템에 도입할 데이터(로그) 수집기 및 분석 툴을 찾기 위해 여러 솔루션을 탐색해보았다.
여러 솔루션들을 비교하기 위해서는 먼저 우리 서비스의 특징을 이해하고 정리하는 것이 필요했다.
우리 서비스는 ...
- 모놀리틱Monolithic 구조이다.
- 규모가 작고, 트래픽도 많이 발생하지 않는다.
- Cloud Native 서비스다. (AWS EC2, Docker)
총 5개 서비스가 후보에 올랐는데 (ELK, fluentd, Datadog, Rollbar, Sentry)
각각의 장단점을 분석하여 다음과 같이 요약해볼 수 있었다.
각 솔루션의 장단점 비교
1. ELK stack
로그 수집(logstash), 검색(elasticsearch), 데이터 시각화(kibana)를 통합한 서비스
장점
- 오픈소스 보편적으로 사용되며 레퍼런스가 많다.
- 모니터링 시스템까지 갖출 수 있다.
- logstash 외에 다른 tool을 사용하여 데이터 수집 기능을 대체할 수 있다.
(순수 데이터 수집만을 목적으로 경량화된 모듈 beats를 제공한다)
- 수집된 데이터(로그) 검색 기능
- Kibana를 연결하여 실시간으로 로그를 분석하고 시각화할 수 있다.
단점
- 설정이 복잡하다.
- 완전히 실시간으로 동작하지는 않는다.
- 관리할 로그의 규모에 비해 투자되는 리소스가 많아보인다.(인적, 시간적 리소스)
- elasticsearch와 함께 설치되는 X-Pack 플러그인을 무료로 사용할 수 있었는데, ver6.3을 기점으로 라이센스가 변경됨에 따라 Alert을 비롯한 대부분의 쓸만한 기능은 라이센스 비용을 지불해야 한다.
2. fluentd
다양한 소스에서 로그를 수집하고 이를 중앙화하는 오픈소스 데이터 수집기
장점
- 오픈소스
- 데이터 수집, 파싱, 포워딩을 fluentd 하나로 해결할 수 있다. 즉 시스템마다 각각의 로깅 툴을 사용하지 않아도 된다.
- 제공하는 플러그인이 많아 다양한 시스템의 로그를 파싱할 수 있다. python 로그도 바로 저장할 수 있다.
- 리소스가 적게 든다.
- 로그 분석 시 다양한 플러그인을 사용해도 복잡하지 않다.
단점
- 로그 분석에 있어 logstash처럼 if문 분기를 이용한 상세한 분석은 할 수 없다.
3. Datadog
클라우드 서비스 이용 환경 및 상황을 실시간으로 관찰한 테이터를 수집하고 분석하는 서비스
장점
- 무제한적인 로깅이 컨셉
- 데이터베이스, 메모리스토어, 애플리케이션 등 상세하게 모니터링할 수 있다. 외부 API 연동을 통해 다른 서비스 모니터링도 가능하다. (AWS)
- 그 외에도 다양한 기능이 계속해서 추가되고 있다. 데이터독 하나 잘 구축해놓으면 서비스 규모가 커지고 고도화됨에 따라 활용할 수 있는 기능이 많을 것 같다고 생각했다. 하지만 '지금' 우리 서비스에 도입하는 것이 최선인지는 글쎄
단점
- 무료 요금제도 있긴 하다만...
- 로그를 저장하는 인제스트에 대하여 기가 바이트당 비용을 청구한다.
- 로그 검색이 기본적으로 불가능하고, 검색하고 싶으면 인덱싱을 해야한다. 인덱싱을 활용하면 추가적인 비용이 발생한다.
4. Rollbar
애플리케이션의 에러를 실시간으로 확인하고 추적해 볼 수 있는 서비스
https://rollbar.com/
장점
- real-time으로 에러를 확인할 수 있다.
- 서버 사이드, 클라이언트 사이드 에러 핸들링 모두 가능하다.
- 무료 버전에서 데이터 리텐션을 30일이나 제공한다. (데이터독은 1일)
- 데이터 쿼리를 제공하여 원하는 로그를 검색할 수 있다.
- 에러를 해결하는데 필요한 code-context와 contextual metadata 제공
- Remote debug를 대체할 만한 기능!? 런타임에 발생하는 http 요청 파라미터와 local variable values를 확인할 수 있다.
- 다양한 알림 연동을 지원한다.
단점
- 무료 버전은 알림 갯수를 5000개로 제한
- 데이터 관리는 별도로 필요해보임
5. Sentry
애플리케이션의 에러를 실시간으로 확인하고 추적해 볼 수 있는 서비스
https://sentry.io/
장점
- 에러 분석에 특화되어있다.
- 연관된 에러들을 묶어서 하나로 보여주고, 이를 이용하여 사용자에게 보내는 알림을 세세한 레벨로 조정할 수 있다.
- 간단한 에러 트래킹이나 모니터링 용도로 사용할 때에는 무료 요금제인 Developer Plan을 사용할 수 있다.
- 서버 사이드, 클라이언트 사이드 에러 핸들링 모두 가능하다. 단, 별도의 프로젝트로 각 에러를 관리해야 한다.
- 다양한 알림 연동을 지원한다. (슬랙 알림도 포함되어있다.)
- Azure DevOps, Bitbucket, GitHub, GitHub Enterprise, GitLab, JIRA, JIRA Server, PagerDuty, Slack
- Amixr, ClickUp, Clubhouse, Rookout, Split
- Amazon SQS, Asana, Campfire, Flowdock, GitLab, Heroku, HipChat, Lighthouse, OpsGenie, PagerDuty, Phabricator, Pivotal Tracker, Pushover, Redmine, Splunk, Taiga, Teamwork, Trello*, Twilio
단점
- 유료 요금제로 전환하고자 한다면 비용이 꽤 비싸다. (business 기준 80불)
- 무료 버전은 리포팅이 한달에 5000개로 제한
- rollbar와 마찬가지로 수집된 로그 관리는 추가적으로 고민해야할듯.
감상
ELK와 Datadog이 많은 기업에서 활용하고 있어, 이를 우리 플랫폼 인프라에 도입하는 것이 좋은 경험이 될 것으로 기대했다.
하지만 Datadog의 경우 현재 우리 서비스에는 적합하지 않은 것 같다는 판단을 내리게 되었다.
데이터독의 많은 기능을 활용해볼 만큼 우리 서비스가 크고 복잡하지 않으며, 무제한으로 로그를 적재할 수 있지만 이에 따르는 비용적 부담이 너무 크다고 생각했다. 비용 대비 효용이 떨어지는 느낌...
Sentry와 rollbar는 기능적으로 거의 유사한데, Client side error까지 함께 관리할 수 있다는 장점이 돋보였다. 그 덕분에 사용자 버그 리포트에 대한 문제 상황 파악에 유리할 수 있겠다고 생각했다.
물론 프론트엔드 에러 로깅을 위한 별도의 프로젝트를 구축해야 가능하겠지만, 추후에 프론트엔드 로그도 함께 핸들링할 여지를 둘 수 있어 좋은 선택지로 보인다.
다만 이거 하나로 모든 것을 해결할 수는 없고 전체 로그를 관리할 서비스를 추가적으로 도입하는게 좋을 것 같다.
결론
- fluentd에서 nginx, gunicorn, django 로그를 중앙화하여 관리하고
- 특히 에러 상황에 대응하기 위해 sentry 또는 rollbar 셋업
- 추후 로그 데이터 분석을 본격적으로 하고자 하면 EFK 스택(ELK에서 logstash 대신 fluentd)을 도입하면 어떨까
이렇게 시스템 아키텍처를 대략적으로 디자인해보았다.
이후 진행과정에 대해 궁금합니다! 대략 8개월이 지난 지금 허술했던 로깅 시스템이 많이 보완 되었을까요?