Мониторинг полосы пропускания на удаленной машине с помощью WMI

Я пытаюсь отслеживать пропускную способность интерфейсов на удаленной машине с Windows. До сих пор я использовал SNMP с Cisco Bandwidth Formula но для этого требуется получить две выборки в два разных времени. Наконец, что не менее важно, кажется, что значение, которое я записываю с помощью SNMP, совершенно неверно. Поскольку у меня есть поддержка WMI, я бы хотел ее использовать, но единственное значение, которое я нашел (кажется, это то, что я ищу), это BytesTotalPerSec для Win32_PerfRawData_Tcpip_NetworkInterface. Однако это значение больше похоже на общий счетчик (как и SNMP). Есть ли способ получить мгновенную текущую пропускную способность через WMI? Чтобы уточнить поле «Текущая пропускная способность», всегда возвращайте 1000000000 (это максимальная пропускная способность), и, как вы можете себе представить, это бесполезно.


person raz3r    schedule 08.02.2012    source источник
comment
Вы пытаетесь опрашивать SNMP через WMI? Затем вы можете вычислить пропускную способность, как я объясняю здесь   -  person JPBlanc    schedule 09.02.2012


Ответы (1)


Данные счетчика производительности отображаются в двух местах: Win32_PerfRawData* и Win32_PerfFormattedData*. Первый содержит необработанные данные, второй содержит производную статистику, и это то, что вам нужно.

То, что вы обычно видите в perfmon (например), — это данные Win32_PerfFormattedData*.

Попробуй это :

Set objWMI = GetObject("winmgmts://./root\cimv2")
set objRefresher = CreateObject("WbemScripting.Swbemrefresher")
Set objInterfaces = objRefresher.AddEnum(objWMI, _
  "Win32_PerfFormattedData_Tcpip_NetworkInterface").ObjectSet

While (True)
    objRefresher.Refresh
    For each RefreshItem in objRefresher

        For each objInstance in RefreshItem.ObjectSet
            WScript.Echo objInstance.Name & ";" _
              & objInstance.BytesReceivedPersec & ";" _
              & objInstance.BytesSentPersec

        Next

    Next
    Wscript.Echo
    Wscript.Sleep 1000
Wend

Исходя из опыта, измерение за данную секунду довольно бесполезно, если только вы не собираете метрику каждую секунду.

Если вам нужна поминутная пропускная способность, вы можете получить ее самостоятельно из необработанных данных, взяв 2 образца (вам все равно придется делать это в Windows 2000).

См. раздел Windows 2000 здесь, если это имеет смысл.

Производная статистика по Windows 2000

Здесь есть отличная статья . собственный поставщик форматированных данных о производительности

Если вы хотите углубиться в сбор дополнительной статистической информации за более длительный интервал выборки

Джон

person John    schedule 11.02.2012
comment
Я использую предложенный вами класс, и после нескольких тестов я могу сказать, что зарегистрированные значения почти идеальны. Но (да, к сожалению, есть но), как я могу получить индекс интерфейса? Я знаю, что Win32_NetworkAdapter имеет значение имени, которое должно быть идентично значению имени Win32_PerfFormattedData, но угадайте, что. Они не идентичны. Например, меня зовут Broadcom NetXtreme Gigabit Ethernet _2 и Broadcom NetXtreme Gigabit Ethernet #2. Как я могу соединить две таблицы? Есть ли другой способ получить индекс интерфейса? - person raz3r; 14.02.2012
comment
Хорошо, похоже, что я не единственный с этой проблемой, уже есть аналогичный вопрос (к сожалению, без ответа): stackoverflow.com/questions/1832586/ - person raz3r; 14.02.2012