Once in a Lifetime

Slack Integration 본문

Develope Diary

Slack Integration

riceworld 2016. 8. 24. 17:14

얼마전 포스트에서 소개했던 슬랙봇이 있었는데, 제한 사항이 생각보다 꽤 많아서 다른 소스를 찾다가 Slack 공홈에 소개되어있는 mmbot 이라는 봇을 사용해서 몇가지 스크립트를 작성한 후기를 포스팅 해본다.


mmbot 스타터 가이드는 GitHub 에 잘 나와있으니 참고하면 될 것 같고, 슬랙봇으로 구현하고자했던 것은


  • 각 서버의 헬스 체크
  • 파워쉘 스크립트를 통한 스위치 및 IIS 컨트롤

였는데, mmbot을 이용해서 간단하게 구현이 가능했다.


  • mmbot은 nuget 패키지를 참조 할수있도록 모듈형태로 클래스를 제공하고 있고
  • 파워쉘 스크립트 역시 간단하게 처리 할 수있는 클래스를 제공하고 있으며
  • Scheduler까지 등록할 수 있는 CSX 샘플도 기본 제공하고 있어서 

스크립트 작성이 간편하다. 게다가 Hubot의 Brain(Redis로도 사용가능) 기능을 제공해서 Json 형태로 데이터를 보관할 수도 있다.


실제로 서버 헬스체크를 위한 플로우는 다음과 같다.


  1. Brain을 이용해서 모니터링 할 서버를 채널내에서 추가/수정/삭제 가능하도록 스크립트 작성
  2. 헬스체크 모니터링 스크립트 작성 (WebRequest, WebResponse 이용하여 StatusCode로 판단)
  3. 작업스케쥴러에 채널내에서 등록/삭제 가능토록 (기본 제공되는 Scheduler.csx 수정 - Timer 이용한 간단한 스케쥴러임)
  4. 스케쥴러가 실행되면서 각 서버별 Http 응답코드가 200이 아닌 경우, 채널에 오류 메세지 출력

를 골대로 잡고 간단하게 개발을 시작했고, 몇시간만에 어렵지 않게 개발을 완료할 수 있었다. 이 과정에서 들어가야할 것이 잡을 등록하거나 서버를 등록할때의 권한체크(role check)인데, 이는 기본 제공되는 Auth.csx에서 Brain에 유저별 role을 정의하는 명령들을 정의해 놓았으니 참고하시고, 실제 작업스케쥴 등록이나 모니터링 서버등록등에서 role check는 아래의 예시와 같이 체크하면 된다.


bool IsAdmin = robot.GetUserRoles(msg.Message.User.Name).Length > 0 ? (robot.GetUserRoles(msg.Message.User.Name)[0].Equals("admin") ? true : false) : false;

if (IsAdmin)

{

....

}


mmbot 스크립트 작성 가이드는 깃헙 프로젝트 위키페이지 Writing scripts 를 참고 하면된다. (C# Script - mmbot 자체가 C# 으로 작성되어 있음)


.Net Core로 빌드해서 Heroku에도 올라갈지는 좀더 테스트가 필요해 보이는데, 내가 작성한 스크립트 특성상 Linux에 봇을 상주시킬 일은 없을것 같아서 앞으로도 이 부분은 신경끄기로 했다. -_-;


Comments