log.io를 이용한 beanstalk 로그 모니터링

서비스를 개발하다보면 웹서버, api서버, 파일업로드 서버 등 수개의 서버를 구현하게 된다. 개발/운영시 각 서버에 접속하여 로그파일을 보는 번거로움을 해결할수 있는 것이 log.io다.

원리는 간단하다. log.io 서버를 또 한대 두는 것이다. 대신 다른 모든 서버에서는 log.io 서버로 로그 데이터를 보낸다. 서버 운영자는 이 log.io 서버에 접속해서 모든 서버의 로그를 확인할 수 있다.

각 서버에서 log.io 서버로 로그데이터를 보내는 설정도 간단하다. 환경설정 파일에 log.io 서버 주소와 보낼 로그 파일명을 기록한뒤 log.io-harvester를 실행한다. log.io-harvester는 log.io 서버와 소켓으로 연결하여 로그파일을 스트림 형태로 전송하다. 때문에 각 서버의 로그데이터가 log.io 서버에 실시간으로 전송된다.

그럼 log.io 서버 부터 만들어 보자. 그냥 우분투에 log.io 설치는 간단하지만 beanstalk에서는 수작업 할것이 있어 이것으로 진행한다.

log.io-server

노드용 빈스톡을 생성한다. log.io 자체가 노드 위에서 실행하기 때문인다. 간단하게 로그를 모니터링하기 위한 접속 포트다. 이것으로 log.io 서버 설정은 끝이다.

log.io-harvester

로그를 가져올 서버에서 log.io harvester를 설치해보자. 우선 빈스톡에서는 node와 npm 명령어가 기본패스에 없다. 그래서 심볼릭 링크를 생성해 줘야 진행하는데 쉽다.

$ sudo ln -s /opt/elasticbeanstalk/node-install/node-v0.10.26-linux-x64/bin/node /usr/bin/node
$ sudo ln -s /opt/elasticbeanstalk/node-install/node-v0.10.26-linux-x64/bin/npm /usr/bin/npm

서버와 동일하게 log.io 모듈을 설치한다. npm install log.io 설치 후에 ~/.log.io/harvester.conf 파일이 생성되었을 것이다. 이 파일에 log.io서버 정보와 이 서버에 보낼 로그 파일 경로를 입력한다. 이제 log.io-harvester를 실행해 보자. log.io 서버에서는 새로운 스트림이 생성될 것이다. 그리고 생성된 로그 정보가 실시간으로 log.io 서버로 전송된다.

데몬 설정

로그를 데몬으로 돌려보자. start 명령어로 데몬을 돌릴 수 있다. 서버에서 /etc/init/log.io-server.conf 파일을 생성한다.

description "start log.io server"

start on runlevel [2345]
stop on runlevel [016]
respawn

exec su -s /bin/sh -c 'exec "$0" "$@"’ ec2-user -- /home/ec2-user/.../log.io-server

sudo start log.io-server로 데몬을 돌릴 수 있다.

로그를 보내주는 쪽(harvester)에서도 비슷하다. /etc/init/log.io-harvester.conf 파일을 만들고 sudo start log.io-harvester로 데몬을 돌리다. (참고)