Поскольку конечной целью является выгрузка ВСЕХ данных производительности в другой инструмент, API SCOM не будет обеспечивать достаточную производительность, поэтому рекомендуется прямой запрос SQL.
Немного фона:
- SCOM имеет буксирные БД. Оперативный содержит все текущее состояние, в том числе почти в режиме реального времени данные о производительности. База данных хранилища данных хранит исторические данные, включая агрегированные (почасовые и ежедневные) данные о производительности. Все приведенные ниже запросы относятся к оперативной базе данных.
- SCOM как платформа может контролировать абсолютно все - это реализовано в пакетах управления, поэтому каждый MP может вводить новые классы (типы) отслеживаемых объектов и / или новые счетчики производительности для существующих классов. Скажем, вы можете создать устройство MP для устройства SAN и начать сбор данных о производительности. Или вы можете создать еще один MP, который добавит счетчик «Количество файлов» в класс «Windows Logical Disk».
Учитывая вышеперечисленные моменты, приведенные ниже запросы относятся к классу "Компьютер Windows" (поэтому не будет работать, если вы будете отслеживать серверы Unix, вам нужно будет изменить класс) и ко всем связанным объектам.
Шаг 1: Найти все доступные счетчики для компьютера Windows по его имени.
NB !: результаты могут отличаться в зависимости от версии ОС и MP, установленных в вашем SCOM.
declare @ServerName as nvarchar(200) = 'server1.domain.local'
select pc.*
from PerformanceCounterView pc
join TypedManagedEntity tme on tme.TypedManagedEntityId = pc.ManagedEntityId
join BaseManagedEntity bme on tme.BaseManagedEntityId = bme.BaseManagedEntityId
where (bme.TopLevelHostEntityId = (select BaseManagedEntityId from BaseManagedEntity where FullName = 'Microsoft.Windows.Computer:'+@ServerName))
order by ObjectName, CounterName, InstanceName
Шаг 2: Повторите фактические данные о производительности для каждого счетчика, найденного на шаге 1.
@SrcId
параметр - это PerformanceSourceInternalId
столбец из предыдущего запроса.
NB !: все метки времени в SCOM указаны в UTC. Приведенный ниже запрос принимает ввод по местному времени и производит вывод также по местному времени.
declare @SrcID as int = XXXX
declare @End as datetime = GETDATE()
declare @Start as datetime = DATEADD(HOUR, -4, @End)
declare @TZOffset as int = DATEDIFF(MINUTE,GETUTCDATE(),GETDATE())
SELECT SampleValue, DATEADD(MINUTE, @TZOffset, TimeSampled) as TS
FROM PerformanceDataAllView
where (PerformanceSourceInternalId = @SrcID)
and (TimeSampled > DATEADD(MINUTE, -@TZOffset, @Start))
and (TimeSampled < DATEADD(MINUTE, -@TZOffset, @End))
По умолчанию SCOM сохраняет только последние 7 дней производительности «в реальном времени», затем агрегируется и выгружается в хранилище данных.
Не вызывайте эти запросы слишком часто и не используйте оператор «NO LOCK», чтобы не блокировать сам SCOM.
Надеюсь, это поможет.
Приветствие
Max