Я хотел бы записывать данные из заданного набора счетчиков производительности Windows непосредственно в таблицы SQL Server. Предоставляет ли Windows способ сделать это без написания специального приложения для этого?

Если так, есть ли серьезные проблемы с этим?

2 ответа2

1

Да, это возможно. Вот резюме на основе этой статьи.

Выберите счетчики, которые вы хотите проанализировать

Экспортируйте все счетчики на локальном компьютере в локальную папку.

typeperf -q  > counters.txt

Отредактируйте экспортированный файл и оставьте только те счетчики, которые вы хотите отобрать. Я оставил два ниже:

\Processor(*)\% Processor Time
\Memory\Pages/sec

Собирать информацию

Здесь вы будете собирать данные, которые вы хотите проанализировать, используя logman.

Создать коллекцию.

logman create counter MyCollection -s %computername% -cf counters.txt

Начать запись

logman MyCollection start

Как только вы собрали репрезентативный образец, прекратите выборку.

logman MyCollection stop

По умолчанию на серверах Vista и Windows 2008 ваши счетчики монитора производительности будут храниться в% systemdrive%\PerfLogs\Admin и будут названы в честь имени вашей коллекции (в нашем случае они будут называться MyCollection.blg. Итак, вам нужно перейти к эта папка.

cd %systemdrive%\PerfLogs\Admin

Загрузить на SQL Server

Создайте источник данных ODBC. Предупреждение: собственный клиент SQL Server нельзя использовать с perfmon. Perfmon - это инструмент Windows, который можно использовать только с DSN, которые используют драйвер MDAC SQLODBC, включенный в Windows.

Я создал источник данных ODBC с именем relogDSN. ServerName - это имя сервера, на котором я собирал данные. Это имя будет записано в созданную таблицу DisplayToID SQL Server, и я могу запросить ее, когда захочу посмотреть на свои счетчики.

relog MyCollection_000001.blg -f SQL -o SQL:relogDSN!ServerName

Анализ данных

Ваши счетчики будут сохранены в таблицах CounterDetails, CounterData и DisplayToID, вот пример запроса SQL.

SELECT MachineName,
   CONVERT(DATETIME, CONVERT(VARCHAR(16), CounterDateTime)) as [Date],
   AVG(CounterValue) as Average,
   MIN(CounterValue) as Minimum,
   MAX(CounterValue) as Maximum
FROM CounterDetails
   JOIN CounterData ON CounterData.CounterID = CounterDetails.CounterID
   JOIN DisplayToID ON DisplayToID.GUID = CounterData.GUID
GROUP BY MachineName,
   CONVERT(DATETIME, CONVERT(VARCHAR(16), CounterDateTime)) 
1

в Windows нет встроенного способа записи PerfCounters в базу данных SQL. Вы должны написать инструмент, который делает это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .