본문 바로가기

연구개발/DTS & SSIS

기본 강좌 11 - WMI 데이터 판독기 작업

728x90
반응형

WMI 데이터 판독기 작업

 

SQL 2005 SSIS를 처음 접했을 때, WMI 데이터 판독기 작업WMI 이벤트 감시자 작업 이라는 작업들이 눈에 띄었습니다. 개발 관련 문서나 OS 관련 문서에서 가끔 본 적이 있었던 WMI가 왜 SQL 영역에 들어와 있는 것인가? 이후 WMI에 대해서도 찾아보고, SSIS에서 이것을 이용해 작업을 만들어 사용해 보니 정말 편리한 기능이라는 것을 알게 되었습니다.

 

우선 WMI(Windows Management Instrumentation)가 무엇인지는 아래 부분에서 설명하도록 하고, 실제 환경에서의 사례를 잠깐 예를 들어 설명하겠습니다.

DBA가 하는 작업들 중에서 데이터베이스를 관리하는 작업이 가장 중요한 작업일 것입니다. 데이터베이스 관리 작업에는 단순히 DBMS의 관리뿐만 아니라, 데이터베이스가 있는 서버의 시스템 상태나 디스크의 여유 공간, 프로세스 상태나 OS 정보 등 시스템 전체를 관리해야 하는 것이 일반적입니다.

 

흔히 수행하는 작업 중 하나인 데이터베이스의 데이터 파일들이 들어있는 디스크의 여유 공간을 확인하는 작업을 생각해 봅시다. 필자가 수행했었던 방법은 프로시저나 DTS 등을 이용하여

 

master..xp_cmdshell ‘dir d: |find “바이트 남음”’

 

과 같은 형태의 쿼리를 수행한 후, SQLLEFT, RIGHT, SUBSTRING, CHARINDEX 등의 함수를 이용하여 바이트 정보 부분일 구했습니다.

 

[참고] 이 방법 외에 다음 링크의 스크립트와 같은 별도의 스크립트를 이용할 수도 있습니다.

 

 

또한 서버의 CPU의 사용량이나 메모리 사용량 등의 정보는 관리 도구에 있는 성능 모니터를 이용하여 수집하였습니다. 관리해야 할 서버가 많거나 디스크 드라이브가 많은 경우, 또한 모니터링 해야 할 정보들이 많은 경우 위의 방법들을 이용하는 데에는 많은 어려움이 있을 수 있습니다. 이러한 작업을 좀 더 편하게 할 수 있기 위한 도구가 WMI 데이터 판독기WMI 이벤트 감시자 작업이며, 본 글에서는 WMI 데이터 판독기 작업을 먼저 설명하도록 하겠습니다. (물론, 이러한 관리적인 측면 외에도 WMI 작업은 다양하게 사용될 수 있습니다.)

 

 

WMI가 무엇인지 처음 접하는 분들은 다음 설명을 참고하시기 바랍니다.

 

 

WMI?

원래 1998 Windows NT 4.0 서비스 팩 4의 추가 구성 요소로 릴리스된 WMI Windows 2000, Windows XP Windows Server 2003 운영 체제 제품군에 구축된 핵심 관리 기술입니다. DMTF(Distributed Management Task Force)에 의해 발견된 업계 표준을 기반으로 한 WMI는 거의 모든 Windows 리소스를 액세스하고 구성하고 관리하고 모니터링할 수 있는 수단이자 통로입니다.

 

WMI의 기능을 이해하려면 작년에 그리고 현재까지 Windows 워크스테이션과 서버를 관리하고 모니터링 했던 방법을 생각해 보십시오. 디스크, 이벤트 로그, 파일, 폴더, 파일 시스템, 네트워크 구성 요소, 운영 체제 설정, 성능 데이터, 프린터, 프로세스, 레지스트리 설정, 보안, 서비스, 공유, 사용자, 그룹 등과 같은 Windows 리소스를 관리하는 수많은 그래픽 관리 도구를 사용해 봤거나 현재 사용하고 있을 것입니다.

 

그래픽 관리 도구가 기능적인 관리 솔루션을 제공하긴 했지만 그들의 공통점은 무엇일까요? 한 가지 대답은 WMI 이전에는 모든 Windows 그래픽 관리 도구가 Windows 리소스를 액세스하고 관리하는 데 Win32 API(Application Programming Interface)에 의존했다는 것입니다. 그 이유는 무엇일까요? WMI 이전에는 Win32 API를 통해서만 프로그래밍 방식으로 Windows 리소스에 액세스할 수 있었기 때문입니다. 대부분의 스크립팅 언어에서 Win32 API를 직접 호출할 수 없기 때문에 널리 사용되고 있는 스크립팅 언어를 사용하여 일반 시스템 관리 작업을 자동화하는 쉬운 방법이 없는 이러한 상황이 Windows 시스템 관리자에게 남겨진 것입니다. WMI는 모든 Windows 리소스를 외부 세계에 설명하고 드러내어 일관된 모델과 프레임워크를 제공함으로써 이러한 문제를 변화시켰습니다. 그리고 무엇보다도 시스템 관리자는 WMI 스크립팅 라이브러리를 사용하여 WMI를 통해 게시된 Windows 리소스를 관리할 시스템 관리 스크립트를 만들 수 있습니다.

 

Windows 스크립트 호스트와 Microsoft Visual Basic Scripting Edition(VBScript) 또는 COM 자동화를 지원하는 모든 스크립트 언어(: ActiveState Corporation ActivePerl)를 사용하여 다음과 같은 기업용 시스템, 응용 프로그램 및 네트워크를 관리하고 자동화하는 스크립트를 작성할 수 있습니다.

 

Windows Server 2003, Windows XP Professional Windows 2000 시스템 관리 스크립트를 작성하여 성능 데이터를 검색하고 이벤트 로그, 파일 시스템, 프린터, 프로세스, 레지스트리 설정, 스케줄러, 보안, 서비스, 공유 및 여러 가지 기타 운영 체제 구성 요소와 구성 설정을 관리할 수 있습니다.

네트워크 관리 WMI 기반 스크립트를 만들어 DNS, DHCP SNMP 사용 장치와 같은 네트워크 서비스를 관리할 수 있습니다.

실시간 상태 모니터링 WMI 이벤트 가입을 사용하여 발생할 때마다 이벤트 로그 항목, 파일 시스템과 레지스트리 수정 및 기타 실시간 운영 체제 변경 사항을 모니터링하고 응답할 스크립트를 작성할 수 있습니다. 개념적으로 WMI 이벤트 가입 및 알림이 WMI에 대해 갖는 의미는 SNMP 트랩이 SNMP 세계에 대해 갖는 의미와 같습니다.

Windows .NET Enterprise Server 관리 Microsoft Application Center, Operations Manager, Systems Management Server, Internet Information Server, Exchange Server SQL Server를 관리할 스크립트를 작성할 수 있습니다.

 

원본 : http://www.microsoft.com/korea/msdn/columns/contents/scripting/scripting06112002/default.aspx

 

 

WMI 정보를 읽어오는 명령을 WQL(WMI Query Language)이라 하며, WQL SQL Query와 비슷한 형태입니다. WMI 스크립트는 일반적으로 VBScript 형태로 사용하며 결과는 보통 텍스트나 csv 형태의 파일로 출력됩니다.

 

SSISWMI 데이터 판독기 작업에서는 WQL을 실행시켜 나온 결과를 직접 텍스트 파일로 저장 시키거나 사용자 변수에 저장시킨 후 다른 작업 개체 등에서 이용할 수 있습니다.

 

WMI 데이터 판독기 작업을 수행하기 위해서는 연결 관리자에서 WMI 연결이 추가되어 있어야 하며, WMI 데이터 판독기 작업 내의 WMIConnection 속성에서 < WMI 연결..>을 선택하여 직접 등록할 수도 있습니다.

 

연결 관리자에서 마우스 오른쪽 클릭하여 나타나는 메뉴 중 새 연결(W)을 선택합니다. 이 후, WMI 연결을 선택한 후, 연결할 서버를 지정하면 됩니다.

 

 

 

로컬 서버 외에도 원격 서버에 연결할 수도 있습니다.

 

WMI 데이터 판독기 작업에서 지정할 수 있는 속성은 다음과 같습니다.

 

 

Ÿ           WmiConnection – WMI 연결을 지정합니다.

Ÿ           WqlQuerySourceType – 데이터를 판독하기 위해 수행하는 쿼리인 WQL 쿼리의 입력 형태를 지정합니다. 직접 입력하도록 설정하거나, 변수에 WQL 쿼리문을 저장시킨 후, 이 변수값을 불러와서 실행하거나, 혹은 별도의 쿼리 파일을 만든 후, 이 파일에서 읽어오는 방식으로 수행할 수 있습니다.

Ÿ           WqlQuerySource – 직접 입력으로 지정한 경우 WQL 쿼리를 입력합니다.

Ÿ           OutputType – 결과 형태를 설정합니다. 데이터 테이블인 경우, 테이블 형태로 결과가 반환되며, 속성 이름 및 값 또는 값만 출력되도록 선택할 수 있습니다. 결과가 데이터 테이블인 경우, 대상은 파일 형태이거나 Object형 변수이어야 하며, 속성 이름 및 값 또는 값인 경우에는 파일 형태 또는 String형태의 변수 또는 Object형 변수이어야 합니다.

Ÿ           OverwriteDestination – 결과를 덮어 쓸 것인지, 기존 결과에 추가할 것인지, 아니면 기존 결과를 그대로 둘 것인지를 설정합니다.

Ÿ           DestinationType – 결과를 파일 형태로 저장할 지 변수에 저장할 지 설정합니다.

Ÿ           Destination – DestinationType이 파일인 경우, 저장할 파일 연결을 지정하며, 변수인 경우 변수 명을 지정합니다.

 

 

 

 

 

 

따라하기

본 예제에서는 서버의 CPU 사용률(%Processor Time)을 확인하여 사용률이 30% 미만인 경우, 현재 실행 중인 모든 프로세스의 이름과 경과된 시간, 쓰레드 수 등을 읽어서 텍스트 파일로 저장하는 작업을 만들어 보겠습니다. 이 작업을 약간 응용하면, 서버의 CPU가 높을 때 수행되는 프로세스의 정보를 남기는 모니터링 작업을 만들 수 있을 것입니다.

 

1.       BIDS(Business Intelligence Development Studio)를 실행시켜서 빈 Integration Services 프로젝트를 엽니다. 작업 창의 오른쪽에 있는 솔루션 탐색기 중 SSIS 패키지 부분에서 WMI데이터판독기.dtsx 라는 이름으로 패키지 파일을 하나 추가합니다.

 

2.       왼쪽 도구 상자에서 WMI 데이터 판독기 작업을 선택하여 제어 흐름 영역에 추가한 후, 이름을 [CPU 사용량 확인]으로 변경합니다.



추가한 작업 옆에 빨간색으로 X 표시는 해당 작업에 문제가 있는 경우 나타나는 표시입니다. 본 예제에서는 연결이 지정되지 않은 상태이기 때문에 나타나는 것입니다.

 

3.       본 예제에서는 WMI 연결을 연결 관리자에서 따로 추가하는 대신 직접 WMI 데이터 판독기 작업 내에서 추가해 보도록 하겠습니다. 추가한 WMI 데이터 판독기 작업을 더블 클릭하여 속성 창을 엽니다.
속성 창에서 WMIConnection 항목의 오른쪽에 있는 ... 버튼을 클릭한 후, < WMI 연결..>을 선택합니다.

 

4.       WMI 연결에 대한 속성 창이 나타납니다. 본 예제에서는 Windows 인증을 사용하도록 하겠습니다. 로컬 서버가 아닌 원격 서버에 대해 WMI 정보를 읽어오는 작업을 만드는 경우, 서버 이름과 사용자 자격 증명 정보를 변경하여 사용하면 됩니다.

   

 

5.       WMI 데이터 판독기 작업 편집기 창에서 WqlQuerySourceType의 값이 직접 입력으로 선택되었는지 확인합니다. WQL 쿼리를 변수에 저장시키거나 별도의 파일로 만들어 호출하는 방식을 사용하려면 SQL 실행 작업 등에서와 같이 이 속성값을 변경하여 사용하면 됩니다.

 

6.       WqlQuerySource에서 ... 버튼을 클릭하여 직접 WQL 쿼리를 입력합니다.
입력하는 쿼리는 다음과 같으며, %Processor Time 의 정보를 읽어옵니다. 개별 CPU 별로도 정보를 읽어올 수 있지만, 여기서는 Where 절에 조건을 줘서 _Total 에 대한 값만 읽어오도록 설정하겠습니다.

SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name = "_Total"

     

 

7.       OutputType속성 값, OverwriteDestination대상 덮어쓰기로 지정합니다.


 

 

8.       이제 결과 값을 변수에 저장하도록 설정하겠습니다. 결과 값은 변수에 저장하도록 하거나, 직접 파일에 기록할 수 있습니다. 파일에 저장하도록 하는 경우에는 csv 형태로 저장이 되기 때문에 직접 엑셀을 이용하여 사용하거나, 다른 프로세스에서 csv 형태로 읽어서 사용할 수 있습니다.
여기서는 변수에 저장하도록 하겠습니다. 아직 저장할 변수를 지정하지 않았기 때문에 새로 변수를 추가해 줘야 합니다. 우선 DestionationType변수로 설정한 후, Destionation 속성에서 ... 버튼을 누른 후 <새 변수..>를 선택하여 변수를 추가합니다.
변수를 추가할 때, 변수의 사용 영역을 나타내는 컨테이너와 이름, 유형 등을 지정하게 되며, 본 예제에서는 다음과 같이 지정하도록 하겠습니다.



여기까지가 WQL 쿼리를 이용하여 현재 서버의 %Processor Time을 읽어 들인 후, 사용자 변수인 ProcessorTime에 저장하도록 하는 작업입니다.




이후, 이 값이 30 미만인지를 판단한 후, 프로세스 정보를 수집하는 작업을 추가해 보도록 하겠습니다.

 

9.       제어 흐름 영역WMI 데이터 판독기 작업을 하나 더 추가한 후, 작업의 이름을 [프로세스 정보 수집]으로 변경합니다.



 

10.   더블 클릭하여 작업 편집기 창을 연 다음, WmiConnection 속성을 위에서 만든 연결인 WMI 연결 관리자로 지정합니다.

 

11.   WqlQuerySourceType직접 연결로 설정한 후, WqlQuerySource 창을 열어 다음과 같은 WQL 쿼리를 입력합니다.

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


 

 

12.   OutputType데이터 테이블, OverwriteDestination대상 덮어쓰기, DestinationType파일 연결로 지정합니다.

 

13.   Destionation 속성에서 ...를 클릭한 후 <새 연결..>을 선택합니다. 프로세스 정보가 저장될 대상 파일을 지정하는 것이며, 연결 관리자에서 별도로 지정한 것이 없기 때문에 여기서 바로 추가하도록 합니다.
파일 연결 관리자 편집기에서 사용 유형을 파일 만들기로 선택한 후, 파일명을 적어주거나, 기존의 파일로 지정 하려면 기존 파일로 지정한 후, 파일을 선택하도록 합니다.



여기까지가 WQL 쿼리를 이용하여 서버의 모든 프로세스 정보를 읽어와서 대상 위치인 텍스트 파일에 저장하도록 설정한 부분입니다.



이제 두 개의 WMI 작업을 연결하도록 하겠습니다.

 

14.   처음에 추가한 [CPU 사용량 확인] 작업의 녹색 선을 [프로세스 정보 수집] 작업으로 연결 시킵니다.



현재의 상태는 CPU 사용량 확인이라는 작업이 성공적으로 수행되면, 다음 작업인 프로세스 정보 수집 작업을 수행하도록 한 상태입니다. 하지만, 본 예제의 시나리오는 CPU 사용량이 30% 미만인 경우에만 수행하도록 해야 하기 때문에 설정을 추가해 줘야 합니다.

 

15.   녹색 연결선을 더블 클릭하여 선행 제약 조건 편집기를 엽니다. 선행 제약 조건에 대해서는 다음 번에 좀 더 자세하게 다루도록 하겠습니다.

 

16.   선행 제약 조건 편집기에서 평가 작업(E)식 및 제약 조건으로 선택합니다.
(X) 부분에서
              @ProcessorTime<"30"
을 입력합니다.



 

17.   정상적으로 연결된 후의 패키지는 다음과 같습니다. 녹색 연결선 옆에 Fx 라는 표시는 선행 제약 조건에 식이 포함되어 있다라는 것을 나타냅니다.
패키지를 실행한 후, 출력되는 결과를 확인해 보시기 바랍니다.





 

 

 

WMI 데이터 판독기에서 사용할 수 있는 WQL 쿼리 예제를 몇 개 소개하겠습니다.

 

--논리적 디스크 정보를 반환하는 쿼리

SELECT Name, FileSystem, FreeSpace, Size FROM Win32_LogicalDisk

 

--시스템의 페이지 파일(Paging File) 정보를 반환하는 쿼리

SELECT Description, FileSize FROM Win32_PageFile

 

--성능 모니터의 Logical Disk에 포함된 카운터의 값들을 출력하는 쿼리

SELECT * FROM Win32_PerfRawData_PerfDisk_LogicalDisk

 

--CPU 정보를 출력하는 쿼리

SELECT Caption, CpuStatus, DeviceID FROM Win32_Processor

 

 

[참고] WQL 쿼리는 다음 링크에 있는 Scriptomatic 프로그램을 이용하여 쉽게 작성하실 수 있습니다.

 http://www.microsoft.com/technet/scriptcenter/tools/scripto2.mspx

 

 

지금까지 WMI 데이터 판독기 작업에 대해 설명하였습니다. 다음 글에서는 WMI 이벤트 감시자 작업에 대해 설명하도록 하겠습니다.

 

728x90
반응형