반응형


WMI 이벤트 감시자를 이용한 CPU 사용률 모니터링 시스템 구현

 

한대성

MS SQL Server MVP

에이디컨설팅 책임 컨설턴트 | SQLLeader.com 운영자

 

 

SSIS 패키지는 데이터베이스와 관련된 데이터 처리, 이관, 변환 작업뿐만 아니라 다양한 형태의 배치 작업과 모니터링 작업을 수행할 수 있습니다. 이번 글에서는 SSIS에 포함된 작업 개체 중, WMI(Windows Management Instrumentation)과 관련된 작업 개체인 WMI 이벤트 감시자 작업, WMI 데이터 판독기 작업을 이용한 CPU 모니터링 패키지를 구현해 보도록 하겠습니다.

 

구현할 내용은 다음과 같습니다.

서버의 CPU 사용률(% Processor Time) 70% 이상인 경우, 현재 수행중인 모든 프로세스의 정보를 파일로 기록

 

SSIS 패키지는 WMI 이벤트 감시자 작업을 이용해서 서버의 CPU 사용률이 70% 이상일 경우에 발생되는 이벤트를 기다리다가 해당 이벤트가 발생되면, 사용자가 설정한 로그 기록 작업을 수행하는 방식입니다.

 

1.      빈 패키지를 연 다음, 연결 관리자에서 모니터링 할 서버에 대한 WMI 연결을 추가합니다.

 

 

2.      제어 흐름 영역WMI 이벤트 감시자를 추가하고, 다음과 같은 WQL 쿼리를 입력합니다.

SELECT * FROM __InstanceOperationEvent WITHIN 1

WHERE TargetInstance ISA "Win32_PerfFormattedData_PerfOS_Processor"

and TargetInstance.PercentProcessorTime >=70

 

[참고]

WMI 개체는 OS에 따라 약간씩 차이가 있습니다. 예를 들어, 본 예제에서 사용하는 Win32_PerfFormattedData_PerfOS_Processor Windows Server 2000에는 없는 개체입니다.

 

 

AfterEvent 부분을 이벤트 다시 감시로 설정합니다. 이벤트가 발생한 후에도 다시 감시하도록 설정하는 것입니다.

 

3.      이제 이벤트가 발생(=CPU의 사용률이 70% 이상)했을 때 작업을 수행하는 부분을 구현합니다. WMI 이벤트가 발생하게 되면 SSIS 이벤트 중 WMIEventWatcherEventOccurred 라는 이벤트를 발생시킵니다. 따라서, 이벤트 처리기의 WMIEventWatcherEventOccurred를 선택합니다.

 

운영체제에서 실행 중인 프로세스 정보를 저장할 파일을 설정합니다. 연결 관리자에서 새 파일 연결(F)를 선택한 후, 사용 유형(U)파일 만들기로 변경하고 적절한 파일명을 입력합니다.

[참고]

본 예제에서는, 이 연결의 이름을 PerfLog_Process로 변경하였습니다.

 

만약, 파일 명 뒤에 날짜 정보를 추가하고 싶을 경우, 추가한 파일 연결을 선택한 후, 속성 부분의 Expression에서 다음과 같은 식(Expression)을 설정합니다.

 

[ConnectionString 속성에 대한 식]

"D:\\PerfLog_Process_" + SUBSTRING(REPLACE(REPLACE(REPLACE(REPLACE((DT_WSTR,32)(GETDATE()), "-",""),":",""), " ", ""), ".",""), 1, 20) + ".log"

 

 

4.      이벤트 처리기로 돌아온 다음, WMI 데이터 판독기 작업을 추가하고 다음과 같이 설정합니다.

   WqlQuerySource

SELECT ElapsedTime, IDProcess, Name, PageFileBytes, ThreadCount, VirtualBytes, WorkingSet

FROM Win32_PerfFormattedData_PerfProc_Process

   OutputType                     데이터 테이블

   OverwriteDestination         대상 덮어쓰기

   DestinationType               파일 연결

   Destination                       - PerfLog_Process

 

5.      패키지를 실행시킵니다. CPU의 사용률이 설정한 수치보다 낮을 경우에는 다음과 같이 노란 색으로 대기하게 됩니다.

 

6.      CPU 사용률이 높을 경우, 다음과 같이 이벤트 처리기에서 정의한 작업이 수행됩니다.

 

 

 

 

 

이 외에도 이벤트 처리기에서 SQL 실행 작업이나 데이터 흐름 작업 등을 이용하여 현재 수행중인 쿼리들의 정보를 파일로 기록하도록 하거나 메일 보내기 작업, 프로세스 실행 작업 등을 이용하여 관리자에게 통보하도록 하는 기능들을 추가할 수 있습니다.

 

[참고]

         수집하는 시간 간격을 조절하기 위해서는 2단계의 __InstanceOperationEvent WITHIN 1 값을 1에서 다른 값으로 변경하면 됩니다.

 

         프로세스 정보를 직접 파일에 쓰는 대신, Object 형 변수에 저장시킨 후, 이를 테이블이나 다른 형태의 파일로 출력할 수 있습니다.

 

         4단계에서 WQL 쿼리의 열 순서를 변경하더라도 출력되는 파일의 열 순서는 변경되지 않습니다. ,

                SELECT Name, ThreadCount, ElapsedTime, IDProcess, PageFileBytes, VirtualBytes,

                 WorkingSet FROM Win32_PerfFormattedData_PerfProc_Process

형태로 조회를 하더라도 출력되는 데이터는 위와 같이 열의 이름 순서대로 출력됩니다.

 
  
반응형

+ Recent posts