Node.js

에이전트 구성

whatap node 에이전트는 소스가 오픈된 상태로 배포됩니다. npm install을 통해서 소스를 확인할 수 있습니다.

모니터링 정보를 수집하기 위한 트레이서, 수집된 정보를 서버에 전송하기 위한 에이전트, npm 설치를 지원하는 파일들로 구성됩니다.

구성 파일

node.js 모니터링 서비스를 구성하는 각 파일의 역할은 다음과 같습니다.

$ROOT/node_modules/whatap

파일명 파일명

whatap.conf

에이전트 설정 파일 샘플 ( 복사해서 라이선스를 입력 )

lib

에이전트, 트레이서 프로그램

README.md

에이전트 설치 매뉴얼

package.json

npm 모듈 환경구성

index.js

main export 선언

에이전트 이름 식별

와탭이 애플리케이션 서버를 식별하기 위해 사용하는 기본 패턴은 다음과 같습니다.

default 환경
NODE-{ip2}-{ip3}
cluster 환경
NODE{cluster}-{ip2}-{ip3}
설정 설명

type

애플리케이션 유형 명(NODE)

ip#

Ip를 '.'으로 나누었을 때 #번째 자리(0부터)

pid

Application Process Id

hostname

호스트 명

cluster

한 서버에 다중 node.js 동작할 때 클러스터 Id

와탭 이름 패턴 변경

환경 변수를 통해서 와탭 이름을 변경할 수 있습니다.

whatap.conf
process.env.WHATAP_NAME = "NODE-{ip2}-{ip3}";

var whatap=require('whatap').NodeAgent;
...

서버에서 에이전트 네이밍

에이전트 환경을 기반으로 이름을 결정하는 것이 아니라 서버에서 이름을 자동으로 부여하는 방식입니다. node.js 서버가 컨테이너나 PaaS 환경에서 동작하는 경우에 활용합니다.

Heroku 환경에서는 다시 시작할 때마다 IP가 변경되기 때문에 새로운 이름이 계속 만들어집니다.
whatap.conf
auto_oname_enabled=true
auto_oname_prefix=nodejs
Env에 설정(app.js)
process.env.WHATAP_LICENSE='x46n3226be1ah-z2rsecfcvlq2ph-z11bc81gfhqpgg';
process.env.WHATAP_SERVER_HOST='52.78.209.94/52.78.224.235';

process.env.auto_oname_enabled=true;
process.env.auto_oname_prefix='mynode';


var whatap=require('whatap').NodeAgent;
env에 설정할 때는 require('whatap')보다 먼저 선언되어야 합니다.

auto_oname_prefix는 에이전트 이름의 prefix입니다. 와탭 서버는 auto_oname_prefix에 지정한 이름에 일련번호를 붙이는 방식으로 에이전트 이름을 부여합니다.

부여된 에이전트 이름
mynode1

Network & security

와탭은 에이전트에 서버 방향을 TCP 연결 후 모니터링 데이터를 전송합니다.

WhaTap agent to server
Figure 1. 와탭 에이전트 네트워크

에이전트는 하나의 TCP 세션을 통해서 데이터 전송과 서버의 제어 요청을 처리합니다. node agent는 UDP를 사용하지 않습니다. node agent에서 와탭 수집서버 방향으로 방화벽을 개방합니다.

수집서버 주소와 포트

와탭 서버는 데이터 리전 서버와 프론트 서버로 유레카 등으로 구분합니다. 데이터 리전에는 다시 Proxy, Yard, Gateway, Keeper 등이 있습니다. 에이전트는 그중에 Proxy 서버와 통신을 합니다.

node agent에 와탭 서버의 proxy 서버의 주소를 지정합니다.(ex whatap.server.host=10.0.3.1/10.0.3.2) 서버 주소를 설정할 때는 proxy 서버 숫자만큼 지정합니다. 와탭 서버는 설치 방식에 따라서 proxy 서버를 1개 혹은 여러 개를 사용할 수 있습니다.

와탭 Proxy 서버는 6600포트에서 리스닝 합니다. 에이전트에서 특별한 설정을 하지 않으면 에이전트는 6600포트로 접속을 시도합니다.

두 개의 Proxy 서버가 서로 상이한 포트를 사용할 수 없습니다. 여러 대의 Proxy 서버를 사용하는 경우 리스닝 포트는 동일해야 합니다.
whatap.conf
whatap.server.port=6600

통신 연결 및 보안

와탭은 퍼블릭 네트워크에서 모니터링 데이터를 수집하는 것을 전제로 설계되었습니다. 따라서 모든 모니터링 데이터를 암호화하여 서버로 전송합니다.

많은 데이터를 암호화 전송하면 오버헤드를 유발할 수도 있습니다. 와탭은 데이터를 선별적으로 암호화합니다. 에이전트와 서버 사이의 통신 과정은 다음과 같습니다.

에이전트와 서버 간 통신 과정
1. 프로젝트 설치 메뉴에서 라이선스 키를 생성하고 이것을 복사합니다.
2. 라이센스 키에는 비밀키가 포함되어 있습니다. 따라서 라이선스 키가 외부에 알려지지 않도록 합니다.
3. node.js를 다시 시작합니다.
4. 와탭 에이전트는 서버로 TCP 세션을 연결합니다.
5. 라이선스 키에 포함된 통신용 비밀키를 가지고 데이터를 암호화하여 새로운 세션용 보안 키를 요청합니다.
6. 서버는 에이전트가 요청한 세션용 보안 키를 새로 만들어 에이전트에 내려보냅니다.
7. 세션용 보안 키는 2개의 암호 키를 포함하고 있습니다.  ASC 알고리즘용 암호 키와 단순 암호를 위한 암호 키입니다.
8. 이후에 에이전트는 텍스트와 제어 등 중요한 데이터는 ASC 암호 키를 사용합니다. 숫자 데이터와 같이 상대적으로 안전한 데이터는 단순 암호화를 거쳐 데이터를 서버에 전송합니다.

에이전트 통신 버퍼

에이전트는 서버 사이의 TCP 연결이 지연되는 경우 에이전트 장애가 유발될 수 있습니다. 때문에 수집된 성능 데이터를 네트워크에 바로 전송하지 않습니다.

에이전트는 내부에 2개의 통신 버퍼를 가지고 통신합니다.

net_send_queue1_size=512
net_send_queue2_size=1024

Queue1에는 대부분의 성능 데이터 특히 정기적으로 전송되는 성능 데이터를 버퍼링하고 Queue2는 트랜잭션 프로파일(ProfilePack)과 액티브 스택(ActiveStackPack)만 별도로 처리합니다.

에이전트는 큐를 기반으로 서버와 통신합니다. 서버가 다운되면 일정 부분은 에이전트가 메모리를 소비합니다. 그 이상의 문제는 생기지 않습니다.

에이전트 다시 접속

에이전트는 서버와 연결이 끊어질 경우 5~10초마다 3번의 재연결을 시도합니다. 그 후에는 재연결을 포기합니다.