У нас есть требование для разработки приложения мониторинга для наших клиентских компьютеров с Windows, и я собираюсь получить некоторую информацию об архитектуре WMI.Наш текущий план состоит в том, чтобы использовать довольно простые сценарии VBScript для периодического запроса базы данных, записи соответствующей информации в плоские файлы для последующей передачи на центральный сервер (где весь тяжелый анализ и отчетность уже существуют для наших компьютеров, не работающих на Windows.
Я пытался найти ответ на этот вопрос в MSDN и сети в целом, но все статьи кажутся особенно «пушистыми» - много «как это использовать», но мало «как это работает внутри».
Возьмем, например, сегмент VBScript, такой как:
set wmi = getObject("winmgmts:\\.\root\cimv2")
set itemCpu = wmi.get("Win32_PerfRawData_PerfOS_Processor.Name='_Total'")
n = itemCpu.PercentProcessorTime
или:
set wmi = getObject("winmgmts:\\.\root\cimv2")
set colMem = wmi.execQuery(
"select AvailableKBytes from Win32_PerfRawData_PerfOS_Memory",,48)
Теперь я понимаю, что они отправляются в базу данных CIM и извлекаютсоответствующие записи, и я думаю существует разрыв между сбором информации в эту базу данных и извлечением ее.
Другими словами, статистика собирается и записывается в базу данных Windows независимо от того, запрашивает ли кто-либо информацию из указанной базы данных.Лучше всего можно описать тандинг следующим образом:
+------------+ req/ ========
| Monitoring | resp / \ stats +------------+
| Processes | <-------> < Database > <-------- | Collectors |
| | \ / +------------+
+------------+ ========
\_____________________________/ \_____________________________/
On-demand Always happening
Но меня интересует процесс заполнения базы данных , глубиной .Такие вещи, как:
- Как мы можем сказать, как часто и при каких обстоятельствах «сборщики» Windows добавляют информацию в базу данных?
- Пишет ли ядро Windows информацию о процессепри каждом переключении задач?
- Пишет ли он информацию о памяти каждую секунду?
- Обновляет ли она только базу данных по требованию (когда приложение мониторинга запрашивает информацию)?
Это то, что я пытаюсь выяснить.
У кого-нибудь есть такая информация или ссылки на технически мыслящие статьи или технические документы по этому вопросу?