Elasticsearch APM-Server Node.js에 적용하기

Node.js application을 만들고, 실제 상용 서비스에 적용하면서 서버 성능 모니터링은 운영 과정에서 상당히 중요합니다.
주로, Node.js의 경우에는 Newrelic등의 APM(Appliction Performance Monitoring)도구들이 존재하나, 대부분이 유료로 운영되고 있습니다.
최근 9월달에 오픈소스인 Elasticsearch는 apm-server를 출시하였으며, Node.js와의 연동도 쉽게 가능할 수 있도록 출시하였습니다. 이번 포스팅은 Node.js APM을 위해 무료로 사용 가능한 Elasticsearch APM-server의 설치와 사용법에 대해서 포스팅 하겠습니다.

Elasticsearch?

Elasticsearch는 아파치 루신을 기반으로 개발된 오픈소스 분산 RESTful 기반 검색엔진으로써, 문서(JSON) 중심의 검색엔진이라고 보시면 될 것 같습니다. 오픈소스로써 다양한 회사에서는 이미 검색엔진을 도입하고 있으며, 분석등을 통해서 인사이트를 찾아내곤 합니다. 흔히들 Elasticsearch 제품군으로 ELK를 이야기 하며, 분산 검색엔진인 Elasticsearch, 다양한 종류의 로그 입출력 도구인 Logstash, 그리고 이렇게 가공된 데이터를 대시보드 기반으로 시각화하여 보여줄 수 있는 Kibana를 하나의 패키지로 보고 사용하고 있는 경우가 많습니다.

대체적으로 설치가 간단하고 쉬우며, 다양한 플러그인을 결합하여 사용할 수 있는 장점이 있습니다.

Elasticsearch apm-server 구성도

elasticsearch apm-server 구성도 출처: elasticsearch apm-server 공식 홈페이지

구성도를 훑어보시면, 다음과 같은 구성으로 이루어져 있습니다.

  • 1) 각 application server에 APM agent에서 정보를 수집합니다.
  • 2) 수집된 정보들은 APM server로 전송됩니다.
  • 3) APM server는 Elasticsearch로 data를 전송하며, 전송된 data를 통해서 Kibana에서 대쉬보드 형태 또는 APM UI를 활용하여 시각화 합니다.

간단하게, Node.js 개발자들은 npm을 통해서 APM agent를 다운받아서 코드안에 삽입하면 되며, 서버를 구동하게 되면, 자동적으로 데이터를 수집하게 됩니다. 이 과정을 위해서는 Elasticsearch, Kibana 및 apm-server가 설치되어 있어야 합니다.

apm-server 설치하기

MAC OS를 기준으로 말씀드리는 점 양해 부탁드립니다. OS별 설치 내용은 Elasticsearch 홈페이지 에서 확인하실 수 있습니다.

1) Elasticsearch 설치

Homebrew를 기준으로, elastic search를 설치합니다.

brew install elasticsearch
2) Kibana 설치

Homebrew를 이용하여 kibana를 설치합니다.

brew install kibana
3) APM-server 설치
  • [1] apm-server를 OS별로 다운로드 합니다.
  • [2] apm server를 사용하시고자 하는 폴더에 압축을 풉니다.
    gunzip -c apm-server.tar.gz | tar xopf -
    
  • [3] kibana에서 사용할 apm server를 설치합니다.
    #apm 압축푼 폴더로 이동
    cd apm-server
    #설치
    ./apm-server setup
    
4) APM agent 설치

Node.js Application 폴더 내에서 npm을 통해 elastic-apm 패키지를 설치합니다.

npm install elastic-apm --save

application 내에 agent code를 삽입합니다.

require('elastic-apm').start({
  // Set required app name (allowed characters: a-z, A-Z, 0-9, -, _, and space)
  appName: 'APP_NAME',
  // Use if APM Server requires a token
  secretToken: '',
  // Set custom APM Server URL (default: http://localhost:8200)
  serverUrl: '',
});
5) APM-server 구동
  • [1] elasticsearch를 실행시킵니다.
    elasticsearch
    
  • [2] apm-server를 실행시킵니다.
    cd apm-server
    ./apm-server -e
    
  • [3] node.js server를 실행시킵니다.
    node server.js
    
  • [4] http://localhost:5601 을 통해서 kibana에 접속합니다.

kibana에 접속하시면, dashboard 등을 통해서 서버의 performance 상태 및 transaction 등을 확인할 수 있습니다. 저도 공부해봐야 하는 상태여서, kibana를 통한 APM은 이후 포스팅에 올리겠습니다. 실제로, kibana 자체가 훌륭한 시각화 도구이기 때문에, 앞으로의 확장성을 고려하면 강력한 APM임에는 분명해 보입니다.

APM 비용이 부담되시거나, 여러가지 확장성을 고려하신다면, elasticsearch APM이 훌륭한 대안이 되지 않을까 생각합니다 :)