본 포스팅은 2022년 8월 19일을 기준으로 작성되었습니다.
본 포스팅은 PC환경에 최적화되어 있으며, 모바일에서는 본문의 글과 이미지의 순서가 일치하지 않을 수 있습니다.
APM은 Application Performance Management의 약자로, 앱 성능을 관리하는 통합 솔루션을 의미합니다. 기존의 APM은 오직 성능 감시(Monitoring)를 뜻하였지만, 현재는 관련 플랫폼의 증가와 기술의 발전으로 단순히 모니터링의 의미를 넘어 앱 성능을 증가시키기 위해 통합 관리(Management)라는 의미로 확장되었습니다.
이 포스팅에서는 Elastic APM의 설치에 관한 내용보다는, APM과 밀접한 RUM같은 기능을 함께 설명하며 APM을 어떻게 활용할 수 있는지, APM을 통해 어떤 인사이트들을 얻을 수 있는지를 기술하려 합니다. 그리고 Elastic APM의 특징과 함께 대표적인 APM플랫폼 중 하나인 Datadog 특징을 소개하려 합니다.
APM을 사용하는 케이스는 다양하겠지만, '성능 향상'이라는 키워드를 목표로 두는것은 동일할 것입니다. 애플리케이션의 성능을 향상시키기 위해서는 당연하게도 실제 서비스되는 환경에서의 데이터가 필요합니다.
APM은 어플리케이션이 서비스되면서 발생하는 DB Query, HTTP Request, Network Traffic, Logs, System Resource 등의 성능 지표들을 수집합니다. 이렇게 실시간으로 수집한 데이터들은 Transaction, Trace, Span 단위로 저장되고, 지정한 필드에 따라 구분되어 분석 및 정렬된 시각화 자료로 제공됩니다.
또 하나의 키워드가 있다면 '이상 탐지'일 것입니다. 초창기 APM이 Monitoring에 중점을 두었기에 가장 기본이 되지만 그만큼 중요한 키워드라고 할 수 있습니다. APM을 사용하여 웹과 백엔드의 실시간 에러메시지를 확인할 수 있으며, 개발자가 직접 예외 상황에 대한 레벨 지정과 이메일과 같은 알림설정이 가능합니다. 또한 최근에는 ML을 기반으로 인공지능이 자동으로 이상탐지를 해주는 기능도 제공되고 있습니다.
이렇듯 APM은 리소스 절약과 성능 향상, 그리고 장애 예방과 탐지에 있어 필수옵션이 되어가고 있습니다. Elasticsearch도 변화하는 시장에 발맞추어 APM관련 회사를 인수하거나 APM certification을 시행하는 등 변화하고 있는데요, 이러한 Elastic APM에 어떤 기능들이 있는지 살펴보도록 하겠습니다.
저희 회사에서 제작한 검색엔진에 Elastic APM을 설치하여 키바나 화면과 함께 실제로 APM이 어떻게 활용되는지 살펴보겠습니다. 좌측은 키바나의 'Services'탭의 화면인데요, 동작중인 서비스 요약, 트랜잭션 분석, 에러와 로그, Metrics를 확인할 수 있는 페이지 등을 제공합니다. 서로 다른 서비스간의 트래픽 차이를 한 눈에 확인할 수 있을 뿐 아니라 실제로 트래픽이 많이 발생한 시간대의 서비스 트랜잭션, 로그를 살펴보며 개선점을 도출할 수 있습니다.
이를 통해 부하가 생기는 서비스에 대해 리소스를 추가하고, 반대의 경우에는 리소스를 감소시키며 장애사항을 예측하여 대비할 수 있을 뿐 아니라 비용 절감과 트래픽 최적화를 기대할 수 있습니다.
다음은 'Traces'탭입니다. Trace란 클라이언트에서 서버로 요청한 하나의 Request를 의미하며 Span의 집합입니다. Elastic APM은 이 Trace들을 같은 종류의 URL 호출을 기준으로 구분하여 분류합니다.
우측은 키바나 Traces 화면인데요, KQL(Kibana Query Language)를 활용해 에러코드가 500인 Trace를 필터링한 후 해당되는 각 Trace들을 확인하는 모습입니다. 단순한 확인 뿐 아니라 해당 Trace가 어떤 Span들을 지나가는지를 확인하며 에러 발생지점을 확인할 수 있습니다.
에러 발생지점에 생성되는 버튼 클릭시 에러가 생긴 Span에 대한 로그와 더불어 코드 라인 단위의 추적 기록을 제공합니다. 실제로 저희 회사에서는 검색엔진을 서비스 하는 중 발생한 에러를 Traces탭을 통해 추적하여 코드파일의 몇번째 라인에서 어떤 에러가 있었는지를 확인해 수정할 수 있었습니다.
Traces 기능은 이처럼 예기치 못한 상황에서의 에러 정보가 정돈되어 저장된다는 점, 이를 코드레벨에서 지연된 시간과 함께 확인할 수 있다는 점에서 코드 최적화 및 서비스 성능 향상에 큰 도움이 되는 기능이라 할 수 있습니다.
다음은 "시각화란 이런것이다!"라고 감히 말할 수 있는 기능인 Service Map입니다. 사용중인 서비스를 전체적인 Transaction의 흐름에 따라 마치 도로가 연결된 지도처럼 한눈에 확인 할 수 있는 기능입니다. 각각의 서비스에 마우스를 오버랩하면 연결된 서비스가 하이라이트 되며, 클릭을 하면 간단하게 지연시간과 데이터처리량, 그리고 에러율과 CPU 사용량을 확인할 수 있습니다.
Service Details 버튼을 누르면 해당 서비스 요약 화면(Overview)로 이동이 되며, Focus map을 클릭하면 해당 서비스를 중심으로 연결된 서비스들만 중앙정렬되어 확대됩니다. Service Map에서도 키바나의 다른 기능들과 마찬가지로 원하는 시간대를 선택하여 볼 수 있고, Comparison 체크박스를 통해 특정 기간과의 비교도 가능합니다.
이렇게 전체 서비스를 한 눈에 볼 수 있는 기능들을 'Bird-eye View'라고 부르곤 합니다. 마치 새가 높은 곳에서 아래를 바라보는 듯한 시야라는 뜻인데요, Service Map과 가장 어울리는 말이 아닐까 하는 생각이 듭니다.
마지막으로 User Experience의 Dashboard입니다. RUM(Real User Monitoring) 기능을 설치하면 사용할 수 있는 탭입니다. 서비스를 이용하는 유저가 어떤 국가에서, 어떤 장치와 OS로, 어떤 브라우저를 사용하는지를 Map과 Pie Graph 형태로 제공하여 한눈에 파악할 수 있습니다. 또한 Backend와 Frontend의 Page Load나 Rendering, Block, Task Time과 같은 Metric 데이터들을 백분위수로 구분하여 확인할 수 있습니다.
이를 통해 유저들이 주로 서비스를 이용하는 환경을 파악할 수 있고, 특정 환경에서만 발생하는 호환성 문제에 대한 파악 역시 용이합니다. 또한 마케팅 전략을 세우는 것이 유용할 것이며, UX 데이터들이 쌓임에 따라 서비스의 어느 부분에서 사용자가 불편을 느끼고 개선을 필요로 하는지 파악하는 것에도 도움이 됩니다.
Elasticsearch 자체가 데이터를 저장하는 공간이기에 발생하는 장점들도 있습니다. Elasticsearch는 AWS S3 기반의 Frozen Tier라는 굉장히 저렴한 가격정책을 최근에 도입하였습니다. 한국의 경우 법으로 정해진 보안 정책상 사용자의 개인정보를 2~3년, 계약이나 청약철회의 경우에는 5년간 보존해야할 의무가 있는데, 사용성이 적은 데이터의 보관가격에 대한 부담이 Elastic APM 사용시에 줄어듭니다.
그리고 RDB나 NoSQL의 데이터를 저장한 다음 로그를 비교하는 등, 서로 다른 데이터베이스의 데이터들을 통합하여 비교하고 모니터링 할 수 있다는 점은 Elastic APM만의 장점이라고 할 수 있습니다.
Datadog APM은 2017년에 베타버전이 출시가 된 후발주자임에도 불구하고 현재 APM시장을 리드하는 프로그램들중 하나로 자리매김하고 있습니다. 그렇다면 도대체 Datadog APM에는 어떤 기능들이 있길래 단기간에 성장할 수 있었는지를 특징들과 함께 살펴보려 합니다. 마찬가지로 동일한 검색엔진에 Datadog Agent를 설치하여 진행하였습니다.
Deployment란 도커와 같은 컨테이너 환경에서 Pod을 일정하게 유지해주는 컨트롤러인 Replicaset의 변경사항을 저장하는 오브젝트입니다. 일종의 버전기록, Revision인 셈인데요, 컨테이너 엔지니어는 이 Deployment를 기반으로 버전 업데이트와 관리, 롤백을 진행합니다.
엔지니어라면 서비스 버전마다 성능이 어떻게 달라졌는지가 궁금할것입니다. 이를 한눈에 확인할 수 있는 기능이 바로 Datadog의 Deployment 기능입니다. Datadog은 서로 다른 버전의 Deployment들의 에러율, 초당 요청 수, 작업시간 분위수 등을 가시성 있게 정리하여 제공해줍니다. 이러한 성능지표들을 단순히 절대적인 수치로 비교하는 것에 그치지 않고, 서로 다른 두개의 버전끼리 상대적으로 어떤 지표들이 몇%만큼 증감했는지도 보여주기에 성능분석이 훨씬 수월하며, 그에 따라 서비스의 버전 관리 난이도도 감소한다는 장점이 있습니다.
또, 컨테이너 환경 뿐 아니라 Host로 구성한 서비스도 버전 태그를 따로 지정하는 방식으로 Deployment 기능을 사용할 수 있습니다. Datadog이 컨테이너 환경에 강하다고 여겨지는 이유이자 급속도로 성장할 수 있었던 이유이기도 합니다.
Datadog APM을 설치하고 테스트하는 과정에서 가장 놀라게 된 부분 중 하나였던 Browser Test Performance 기능을 소개하려 합니다. 서비스를 여러 환경에서 테스트하려면 개발과정에서 수작업을 통해 알파 테스트를 하거나, 미리 사용자를 유치하여 배포해 베타 테스트를 해야합니다. 그러나 다양한 국가와 기기, OS와 브라우저를 테스트하는 것은 쉬운일은 아닐 것입니다. Browser Test Performance는 바로 이 갈증을 해소해주는 기능입니다. 이 기능은 기본적으로 RUM을 활성화 해둔 상태를 전제로 UX 탭에서 설정할 수 있습니다.
좌측 첫번째 이미지는 설정의 일부입니다. Chrome/Firefox/Edge 브라우저를 선택 가능하며 Labtop, Tablet, Mobile 기기를 선택할 수 있습니다. 또한 대륙별 주요 국가들을 선택할 수 있고, 테스트 주기나 Alert 설정 또한 가능합니다.
이후 접속할 웹의 URL과 테스트할 동작을 지정할 수 있습니다. URL의 경우 보안설정과 프로토콜 설정이 가능하며, 동작의 경우 마우스나 키보드 입력부터 CRUD 기능 등 굉장히 다양한 바리에이션을 지원합니다.
이 설정들을 기반으로 테스트를 진행하면 두번째와 세번째 이미지처럼 동작마다의 실행시간과 에러정보를 확인할 수 있고, 각 Request마다 사용한 환경과 실제로 동작한 웹 화면을 리플레이 영상으로 확인할 수 있습니다. 특히 리플레이 기능은 Datadog의 전문성을 다시 한번 확인할 수 있는 신선한 충격을 주었던 기능이었습니다.
RUM은 Real User Monitoring의 약자로, APM에 종속되는 기능이 아닌 별개의 기능이지만 RUM과 APM이 뗄래야 뗄 수 없는 밀접한 관계에 있기 때문에 소개하려 합니다. Datadog의 RUM 탭은 키바나와 상당히 비슷합니다. 각각의 서비스마다 웹상태를 확인할 수 있고, 유저분석 쪽에서는 세션, 국가, 페이지 뷰, 장치, 브라우저 정보들을 확인할 수 있습니다. 성능모니터링 쪽에서는 전체 렌더링 시간, 첫 입력 딜레이, 누적 레이아웃 이동 등을 확인할 수 있으며 에러를 발생시키는 활동을 저장하고 있습니다.
Sessions & Replays 탭에서는 세션에 대한 정보를 시계열 리스트 형식으로 확인할 수 있습니다. 상단의 필터를 통해 그래프나 맵으로도 확인할 수 있으며, 각 세션의 왼쪽에 있는 재생 버튼을 눌러 웹동작에 대한 리플레이를 확인할 수 있습니다. 이 리플레이들은 우측 세번째 이미지에서 볼 수 있듯 실제로 사용자가 웹을 사용할 때의 영상기록인데요, 마우스의 움직임과 클릭, 키보드 입력등 웹과의 상호작용 전부를 기록합니다.
Datadog RUM 기능을 사용하면 Elastic RUM의 장점과 동일하게 마케팅 전략수립에 도움이 될 지표를 얻을 수 있으며, 사용자 환경에 따른 에러확인으로 호환성 이슈를 해결하는 것에 도움이 될 것입니다. 우측 사진들 중 가장 마지막 GIF가 Datadog에서 확인가능한 실제 사용자의 웹사이트 이용화면입니다. 관리자는 이를 통해 사용자가 가장 오래 이용하는 페이지와 가장 빈도수가 높은 웹 동작을 확인할 수 있기 때문에, 이용 편의성 개선에 큰 도움이 될 것으로 예상됩니다.
지금까지 APM이 무엇인지, Elastic APM과 Datadog APM의 특징들은 어떤것이 있는지를 알아보았습니다. APM 플랫폼 선택에 정답은 없습니다. 만약 저렴한 비용으로 자료를 저장할 공간과 마음대로 활용할 수 있는 기능을 원한다면, Elastic APM이 좋은 선택일 것입니다. 특히 APM에 관한 폭과 깊이가 있는 엔지니어를 보유하고 있다면 다른 APM 플랫폼에 있는 기능을 Elastic APM으로도 구현 할 수 있기 때문에 더욱 그러할 것입니다. 반대로 이미 만들어진 기능들 중에서 특수한 기능을 선택하여 사용하고 싶다면 Datadog APM도 좋은 선택일 것입니다. 데이터의 저장 유무나 APM을 사용하는 목적에 따라서도 선택의 기준은 나뉠 것입니다. 어떤 APM을 사용할지는 여러분의 선택입니다. 이 포스팅이 APM에 대한 이해에 도움이 되었기를, 선택에 도움이 되었기를 바라며 글을 마칩니다.