앤서블(Ansible)은 IT 서비스 배포에 널리 이용되는 IaC(Infra as Code)도구 중 하나입니다. 와탭에서도 SaaS 서비스 배포를 위해 앤서블을 적극 활용하고 있는데요. 오늘 포스팅에서는 와탭 서버 모니터링 에이전트를 앤서블로 배포하는 예를 통해 활용법을 알아봅니다.
먼저 서버 에이전트를 설치하는 것 부터 시작하겠습니다. gpg 키를 추가하고, debian 파일로 배포된 패키지를 설치하는 과정을 앤서블로 작성하면 다음과 같습니다.
hosts:serversbecome:truebecome_user:rootvars:tasks:-name:AddWhataprepositoryGPGkeyansible.builtin.apt_key:url:http://repo.whatap.io/debian/release.gpg-name:Getwhatap-infradebansible.builtin.apt:deb:http://repo.whatap.io/debian/whatap-repo_1.0_all.deb-name:Installwhatap-infraansible.builtin.apt:update_cache:truename:whatap-infra
이 플레이북은 와탭 설치 가이드에 나와 있는 다음의 셸 스크립트와 같은 동작을 수행합니다.
wget http://repo.whatap.io/debian/release.gpg -O -|sudo apt-key add -wget http://repo.whatap.io/debian/whatap-repo_1.0_all.debsudo dpkg -i whatap-repo_1.0_all.debsudo apt-get updatesudo apt-get install whatap-infra
간단한 동작이기 때문에 셸 스크립트로 수행하여도 큰 문제는 없습니다. 그러나 몇 가지 차이점이 있습니다.
물론 셸 스크립트에서도 위의 단점을 보완할 방법이 충분히 있습니다. 그러나 방어 코드를 많이 넣다보면 코드의 분량이 길어지고 가독성에도 나쁜 영향을 줄 수 있으므로, 배포 작업이 복잡해질수록 IaC 도입을 고려하는 것이 낫습니다.
10개의 VM 장비로 운영하는 서비스에 와탭 서버 모니터링을 적용한다면, 에이전트의 설정 파일도 10개가 존재할 것입니다. 설정을 바꿀 때마다 파일 10개를 수정헤야 한다는 뜻입니다. 만약 모든 서버에 동일한 에이전트 설정을 사용한다면 파일 복사만 반복하면 되므로 사정이 좀 낫습니다. 그러나 서버마다 설정 파일의 내용을 조금씩 달리 해야 한다면 실수할 가능성이 높아집니다.
예를 들어 와탭에서는 에이전트에 고유의 이름을 붙일 수 있는데요. 기존 서버의 설정 파일을 수동으로 복사해서 작성하는 경우 실수로 에이전트의 이름을 고치지 않을 가능성이 있습니다. 설정 파일을 템플릿 플러그인을 통해 동적으로 작성한다면 이러한 혼동을 방지할 수 있습니다.
먼저 인벤토리를 다음과 같이 작성합니다.
[web-severs]web01 AGENT_NAME=web01web02 AGENT_NAME=web02web03 AGENT_NAME=web03[webapp]was01 AGENT_NAME=was01was02 AGENT_NAME=was02was03 AGENT_NAME=was03
그리고 설정 파일을 생성하는 셸 스크립트의 템플릿을 다음과 같이 작성합니다.
#!/bin/bashCONF="/usr/whatap/infra/conf/whatap.conf"#...echo"license=xxxxx-aaaa-bbbb-cccc"echo"oname={{ AGENT_NAME }}" |tee -a $CONFecho"createdtime=`date +%s%N`" |tee -a $CONF#...
이제 template 플러그인을 통해 설정 파일을 배포하면 자동으로 적절한 이름이 설정될 것입니다.
만약 웹 서버와 WAS 서버를 별도의 프로젝트에서 모니터링하고 싶다면 어떻게 해야 할까요? 다음과 같이 프로젝트 액세스 키를 그룹 변수로 선언하면 됩니다.
[web-severs]web01 AGENT_NAME=web01web02 AGENT_NAME=web02web03 AGENT_NAME=web03[web-servers:vars]ACCESS_KEY=aaaa-bbbb-cccc-dddd[webapp:vars]ACCESS_KEY=zzzzz-yyyyy-xxxxx-vvvvv
셸 스크립트 템플릿은 다음과 같이 작성합니다.
#!/bin/bashCONF="/usr/whatap/infra/conf/whatap.conf"#...echo"license={{ ACCESS_KEY }}" |tee -a $CONFecho"oname={{ AGENT_NAME }}" |tee -a $CONFecho"createdtime=`date +%s%N`" |tee -a $CONF#...
이렇게 배포한 스크립트 파일을 실행하면 서버가 속한 그룹에 맞는 액세스 키와, 서버 별로 고유한 에이전트의 이름이 자동으로 작성됩니다.
예시에서는 변수의 이름을 통해 값을 참조하는 간단한 사용법만 보여드렸는데요. 앤서블의 템플릿 엔진 jinja2는 웹프레임워크 Flask에서 html 파일을 생성할 때 사용할 정도로 성능이 강력합니다. jinja2 문법에 대해 잘 공부해두면 더욱 복잡한 설정 파일 배포도 완전 자동화 할 수 있는 여지가 있습니다.
오늘 포스팅에서는 와탭 서버 에이전트를 앤서블로 배포하는 예를 통해 앤서블의 템플릿 플러그인 사용법을 알아 보았는데요. 앤서블이 가장 유용한 상황 중 하나가 예시와 같이 같은 어플리케이션을 조금씩 다른 설정으로 배포해야 할 때 입니다. 예시를 잘 이해하셨다면 다른 어플리케이션을 배포할 때도 응용할 수 있을 것입니다.