суббота, 25 ноября 2017 г.

Импорт данных счетчиков производительности из blg-файлов в базу MSSQL


Перед тем, как собирать данные счетчиков производительности, я задумался о месте хранения; варианта было два: либо файл, либо sql-база. Хорошо бы сразу получить данные в базе, но сбор - это каждый раз insert, т.е. лишняя нагрузка на сервер, именно поэтому пришлось выбрать вариант хранения в blg-файле.
Данные счетчиков производительности обычно смотрят в системном мониторе из сохраненного blg-файла, однако полноценный график в нем с высокой точностью по оси ординат не построить, не понять. Тому следующий пример:
Есть 0, есть 20, а между ними ничего не указать. После безрезультатного ковыряния настроек системного монитора я пришел к необходимости загрузить этот файл в базу данных. Стал искать в интернете, на момент написания этой статьи рускоязычных примеров не было, англоязычных полно, поэтому взял пример самой популярной на тот момент: https://blogs.msdn.microsoft.com/edwinh/2016/11/07/using-relog-exe-to-import-perfmon-logs-into-a-sql-database-then-use-excel-pivot-charts/
 Итак, двигаемся также по шагам.
1) В MSSQL создаем базу данных, в моем случае PerformanceAnalize. 
2) Создаем источник данных ODBC:
 2.1) В командной строке или в "Пуск-->Выполнить" вписать odbcad32.exe и Enter.
 2.2) На закладке "Системный DNS" (System DNS) добавляем новый источник данных, выбираем SQL Server (не native client) и настраиваем параметры:
2.3) в процессе настройки подключения предпочтительней выбирать NT-аутентификацию.
3) Открываем notepad++ и пишем следующий код:
$sourceblg = "F:\PerfLogs\20112017010346.blg"
$sqlDSNconnection = "SQL:Perfmon_DSN!logfile"
$AllArgs = @($sourceblg, '-f', 'SQL', '-o', $sqlDSNconnection)
& 'relog.exe' $AllArgs 
Полное имя blg-файла необходимо указать свое. Если нужно несколько файлов загрузить, также инициализируем и перечисляем через запятую, т.е. 
$sourceblg1 = "F:\PerfLogs\b1.blg"
$sourceblg2 = "F:\PerfLogs\b2.blg"
$AllArgs = @($sourceblg1, $sourceblg2, '-f', 'SQL', '-o', $sqlDSNconnection)

Сохраняем файл с расширением *.ps1

4) Открываем PowerShell, желательно под админом во избежание еще каких-нибудь ограничений. Запускаем созданный файл-скрипт:
C:>F:\ImportBLGtoSQL.ps1
И получаем сообщение о запрете запуска скриптов. Поэтому шаг следующий.
5) Для возможности запуска скриптов в PowerShell выполнить:
Set-ExecutionPolicy Unrestricted
И на вопрос ввести Y

6) Теперь повторяем C:>F:\ImportBLGtoSQL.ps1
И данные загружаются в базу.

Результаты:

Далее для получения графиков можно использовать различные программы или написать свою. В MS Excel данные выглядят так:

Эта ось ординат дает уже более точную информацию. 

Комментариев нет:

Отправить комментарий