System Center Operation Manager(SCOM)를 통한 Windows Azure 모니터링

WinAzure_rgb

비즈니스를 진행하다 보면, 사내에 직접 두고 운영할 형태의 Private Cloud가 아닌 Public Cloud 서비스를 이용해야 할 시나리오가 종종 있습니다. IT 엔지니어 분들께서는 PaaS 기반의 공개 클라우드의 경우에도 우리 IT 엔지니어 분들께서 도와주셔야 할 일이 있다라고 말씀드리고 싶습니다.

보통 외부에서 운영되는 공개 클라우드, Microsoft에서는 Azure라는 플랫폼을 제공하고 있는데요. 해당 플랫폼에서 동작하는 조직의 응용 프로그램이 어떻게 동작하고 있으며, 성능은 얼마나 나오고 있는지도, 개발자나 조직의 궁금 사항이기도 합니다. 예를 들어 Azure 플랫폼의 Web, 또는 Worker 역할에서 동작하는 응용 프로그램의 상태를 파악하고 싶다는 것이죠.

image

Hybrid Cloud라는 단어가 어렵지 않게 들려오고 있는 요즘, 일부의 솔루션은 공개 클라우드에, 일부의 솔루션은 사설 클라우드에 배치하고 이 둘을 연계해서 서비스를 기획할 수도 있기에, IT 엔지니어 분들도 공개 클라우드에 대한 기본 지식은 조금 필요해진 시점이 되지 않았나 싶습니다. Microsoft의 경우, 전체적인 인프라 모니터링에 대해서는 System Center Operation Manager(SCOM)이 담당하고 있으며, 현재 최신 버전은 2007 R2, 향후 2012 버전을 출시할 예정입니다. (다음달에 베타 버전이 나올 예정입니다.)

타 클라우드 솔루션과 차별점은 바로 관리 인프라에서 사설과 공개 클라우드를 모두 관리할 수 있다는 점이 Microsoft 모니터링 기술의 장점인데요. 바로 Windows Azure도 성능 및 각종 오류, 로그등을 SCOM에서 관리할 수 있습니다. Windows Azure Management Pack를 제공한다는 의미입니다. Windows Azure MP의 경우, SCOM 2012에서는 기본 설치 가능, SCOM 2007 R2의 경우에는 통합 업데이트 4(CU4)가 사전에 필요합니다. (설치 방법)

Windows Azure의 각종 역할도 실제로 열어보면, Windows 기반에서 제공되고 있습니다. Web, Worker 역할을 게시할 때, 원격 데스크톱에 대한 설정을 해줘보시면, 해당 역할에 RDP 연결이 가능한 형태가 되게 되고, 이로 유추해보면, Windows Azure에서는 Windows에서 제공되는 많은 성능 모니터의 카운터 값을 그대로 불러다가 사용할 수 있다는 의미입니다.

Windows Azure의 경우에도 모니터링 및 관리를 위해서는 인증 후 접속하는 형태를 가지고 있습니다. SCOM과의 연결도 이러한 인증을 거쳐야 연결이 됩니다. SCOM의 경우, 이러한 인증을 x.509 인증서를 기반으로.. 쉽게 말씀드려, 공개 키를 Azure 인프라에, 개인 키를 개인 인프라에 배치해놓고 상호 암호화된, 그리고 인증된 절차로 연결 고리를 가져가게 됩니다.

image

image

SCOM과 Windows Azure를 연결하면, 기본적인 역할의 동작 유무까지는 모니터링이 가능합니다. 그러나 우리가 원하는 프로세서 사용률이라던가, 메모리 사용량, 그리고 각종 응용 프로그램, 예를 들어, ASP.NET 응용 프로그램의 초당 처리량 등은 추가적인 작업이 필요합니다. 기본적으로 Windows Azure의 각종 성능 수치, 오류, 추적 로그등은 프로그래밍 레벨에서 해당 데이터를 저장하도록 개발(onstart()내)되어야 한다는 의미입니다. 여기서부터는 개발자 분들과의 일부 협업이 필요하다는 것이죠. 앞서 언급드린 바와 같이, Windows의 많은 성능 개체내 카운터 값을 코드에서 던져주는 형태로 개발해야 합니다. 대표적인 카운터에 대한 코드내 카운터 코드는 링크, ASP.NET 응용 프로그램별 카운터 링크를 참고하시면 좋을 듯 합니다. 필요한 DLL이나 기본 설정 코드들은 Visual Studio 2010과 Windows Azure SDK, Tool등을 활용하시면 별도의 편집기로 하드 코딩하지 않으셔도, 손쉽게 추가됩니다. (이참에 관심이 있으시다면 IT 전문가 분들도 Visual Studio 2010과 Windows Azure Training Kit을 통해 간단히 Windows Azure를 살펴보시는 것은 어떨까요? 미소)

Windows Azure SDK의 버전에 따라 코드 레벨에서 사용되는 String 값이나, 연결 데이터 값이 조금씩 틀립니다만, 1.4 버전을 기준으로는 여기에 있는 소스를 사용하시면 됩니다. 코드가 잘못될 경우, Windows Azure에 업데이트시, 지속적인 복구 모드가 동작하는 것을 보실 수 있습니다. 코드의 문제인지, 딴 문제를 구분할 수 있는 가장 좋은 방법은 오류시, 원인이 될 만한 부분을 Try, Catch 구문을 사용하여, 정상 동작이 되는지를 살펴보면 좋겠죠. (제가 개발 영역에선 잘 모르다보니 ㅜㅜ)

image

Windows Azure의 진단 데이터는 프로그래밍 레벨에서 해당 수치를 추출해서, Windows Azure내 Storage의 Table에 저장되게 됩니다.

image

이렇게 Storage에 저장된 데이터를 SCOM에서 주기적으로 불러와, 수치적으로 표시해주게 됩니다. Windows Azure에서 서비스되고 있는 응용 프로그램내 해당 데이터들의 추출 주기를 설정할 수 있고, SCOM의 Authoing Panel내 규칙 속성에서도 수집 주기를 설정할 수 있죠. Management Pack의 경우 XML 형태로 만들어지기 때문에, Authoring Console(리소스 킷)을 이용하는 것도 편리하게 규칙이나 개체, 클래스를 만들 수 있습니다. 기본적으로는 6~7개 정도의 성능 수집 규칙을 제공합니다.

image

image

개발자가 생성한 코드내 진단 관련 사항, Windows Azure 관리 포탈내 연결 관련 설정, IT 엔지니어 분들을 통한 응용 프로그램 모니터링이 합쳐지면, 아래와 같이 SCOM 모니터링 및 리포팅이 가능해지고, 한눈에 확인 가능한 형태가 된다는 것이죠.

image

Windows Azure와 SCOM의 연계에 관련된 사항을 정리한 좋은 링크를 추가합니다.

  1. Windows Azure와 SCOM의 기본 연결
  2. SCOM 2007의 Azure 진단 모니터링 카운터 추가
  3. Web, Worker 역할내 성능 카운터 설정 (소스는 최신 SDK 예제를 참고하셔야 합니다.)
  4. Monitoring and Diagnostic Guidance for Windows® Azure™ - hosted Applications

Windows Azure와 관리 프레임워크를 살펴보면서 느낀 점은 조금은 개발자 분들과 IT 엔지니어 분들의 교집합이 있어야겠구나? 라는 생각입니다. 아주 깊은 개발 지식까지는 아니더라도, 간단하게 코드내 IT 인프라와 연계할 부분에 대해서는 PowerShell 스크립트 단이라던가, 간단한 코드 레벨은 알아야 될 것으로 예상됩니다. 미소