다음은, Win32_PerfRawData_Tcpip_NetworkInterface 클래스를 이용해서 BytesReceivedPersec,BytesSentPersec 값을 WMI를 통해 가져오는 예제 코드 입니다.
set oSvc = GetObject("winmgmts:root\cimv2")
wqlQuery = "select BytesReceivedPersec,BytesSentPersec from Win32_PerfRawData_Tcpip_NetworkInterface where Name = 'Realtek RTL8139 Family PCI Fast Ethernet NIC'"
for each oData in oSvc.ExecQuery(wqlQuery)
for each oProperty in oData.Properties_
if oProperty.Name = "BytesReceivedPersec" then
bytesReceived = oProperty.Value
elseif oProperty.Name = "BytesSentPersec" then
bytesSent = oProperty.Value
end if
next
next
wscript.echo bytesReceived
wscript.echo bytesSent
wqlQuery = "select BytesReceivedPersec,BytesSentPersec from Win32_PerfRawData_Tcpip_NetworkInterface where Name = 'Realtek RTL8139 Family PCI Fast Ethernet NIC'"
for each oData in oSvc.ExecQuery(wqlQuery)
for each oProperty in oData.Properties_
if oProperty.Name = "BytesReceivedPersec" then
bytesReceived = oProperty.Value
elseif oProperty.Name = "BytesSentPersec" then
bytesSent = oProperty.Value
end if
next
next
wscript.echo bytesReceived
wscript.echo bytesSent
BytesReceivedPersec,BytesSentPersec 는 각 원시 Raw 값을 가져옵니다.
이 값은 uint 타입인데 vbscript 특성상 형선언에 의미가 없으므로 맨 마지막에서 순서대로 echo 를 통해서 출력만 해주면 됩니다. 중요한것은 무조건 맨처음과 그 다음 출력되는 글자만 값으로 되며, 필히 숫자이어야 하며, 2개를 반환해야 합니다.
출력된값은 MRTG에서 LIne 별로 값을 읽어 들입니다. 다음 부분은 MRTG의 cfg 일부입니다.
Target[serverinfo_wmi]: `cscript //nologo D:\wwwroot\mrtg-2.14.3\bin\traffic.vbs`
Options[serverinfo_wmi]: growright,bits
Options[serverinfo_wmi]: growright,bits
SNMP에서는 다음과 같은 형식입니다.
Target[serverinfo_snmp]: 65539:public@211.234.xxx.xxx:
Options[serverinfo_snmp]: growright,bits
Options[serverinfo_snmp]: growright,bits
2개의 차이점은, 거의 없어 보이죠?.
(Options에서 bits 를 넣어주면, 계산된 값에 * 8 을 해줘서 bit/sec 로 계산을 해준다. Byte 단위로 챠트를 출력할려면 bit를 넣어주지 않으면 된다.)
지금까지 예제를 보면, 아주 쉽습니다. 그냥 vbscript를 통해서 2개의 값만 리턴을 해주는 명령어를 넣어주기만 하면 되니깐.. 관리도구에 있는 성능카운터에 있는 모든 클래스를 소스로 이용할수 있습니다. 그외 별도의 응용프로그램에서 리턴해주는 모든값도 가능합니다.
다만, MRTG가 perl 기반이라는 단점외에는...