Этап I. Подготовка БД MS SQL и ODBC.
1. Создаем пустую БД, например «Test»
2. Настраиваем ODBC
Идём в контрольную панель и вызываем «Administrative Tools» (Control Panel\All Control Panel Items\Administrative Tools)
Открываем (в зависимости от разрядности) «ODBC Data Sources» и добавляем новый провайдер на закладке «System DSN»
Выбираем источник, SQL Server
Заполняем реквизиты доступа к ранее созданной БД test:
Указываем учетную запись, под которой будет осуществляться подключение к БД (тут все зависит от ваших предпочтений, доменная или иcпользовать учетную запись MS SQL):
Далее можно, ничего не меняя, нажимать "next". В конце будет итоговое окно:
Нажимаем «Test Data Source» и получаем заветное: "TESTS COMPLETED SUCCESSFULLY!". Как показала практика, наличие этой прекрасной надписи не означает отсутствия проблем в дальнейшем.
Проверяем, что новый источник появился:
Этап II. Настройка счетчиков производительности.
Создаем новый набор счетчиков.
Идём в контрольную панель и вызываем «Administrative Tools» (Control Panel\All Control Panel Items\Administrative Tools)
Открываем «Performance Monitor» и в раздел «User Defined» добавляем новую коллекцию счетчиков:
Выбираем «Create manually (Advanced)»:
Указываем, что мы хотим логировать именно счетчики производительности:
На следующем экране представлены все возможные счетчики. Для примера возьмем один:
В разделе «Processor» есть счетчик «% Processor time». В нижнем списке уточняем, какое ядро хотим мониторить. Для примера выбираем «Total» и нажимаем «Add». Это позволит отслеживать в процентах общую нагрузку по всем ядрам.
Указываем интервал сбора данных. Выбираем, к примеру, 15 секунд.
Далее без изменений, поэтому можно сразу жать "финиш". В итоге получаем набор счетчиков, но он пока не запущен, и запускать его пока что рано.
Перенастраиваем набор на БД MS SQL
Заходим в DataCollector01 и перевыбираем параметр Log format с Binary на SQL
Далее в параметре «Data source name» выбираем созданный в первом разделе провайдер
И сохраняем.
Идём в настройки New Data Collector Set. На закладке «Schedule» добавляем задание по старту счетчиков на ежедневной основе.
На закладке «Stop Condition» выставляем условия окончания сбора счетчиков. Я выбрал в качестве ограничения размер БД в 10 Гб.
Сохраняем и запускаем счетчики
Проверяем, что данные начали собираться в БД MS SQL:
Этап III. Получение данных и их обработка в 1С
Теперь нужно получить данные из этой БД и как-то интерпретировать. Для этого нам понадобятся 2 функции:
Подключение к БД:
СоединениеADO = Новый COMОбъект("ADODB.Connection"); ConnectionString = "Provider=SQLOLEDB.1;Data Source='"+СокрЛП(Сервер)+"';Initial Catalog='"+СокрЛП(База)+"';uid="+СокрЛП(Пользователь)+"; pwd="+СокрЛП(Пароль)+";"; СоединениеADO.Open(ConnectionString);
Получение данных из БД
НаборЗаписей = Новый COMОбъект("ADODB.RecordSet"); НаборЗаписей.ActiveConnection= СоединениеADO; НаборЗаписей.Open(ТекстЗапроса);
В описываемом примере используется только 1 счетчик, но на самом деле их может быть много, поэтому сначала получим их список из таблицы [CounterDetails]:
ТекстЗапроса = "SELECT [CounterID] | ,[ObjectName] | ,[CounterName] | ,[InstanceName] | ,[CounterType] | ,[DefaultScale] | FROM [CounterDetails] | ORDER BY ObjectName, CounterName, instanceName";
Результат разбиваем на 3 списка (можно одним, но не наглядно):
- Список объектов контроля (ОЗУ, процессор и т.д.) [ObjectName]
- Список счетчиков [CounterName]
- Список экземпляров (Например нагрузку на процессор можно отслеживать в общем, а можно по ядрам) [InstanceName]
В итоге, выбрав нужное значение, в каждом из списков можно получить ID, по которому мы получим данные из таблицы [CounterData]. Помимо ID в условии указываем интервал времени, за который мы хотим получить информацию:
ТекстЗапросаСч = "SELECT | [CounterDateTime] | ,[CounterValue] | FROM [CounterData] | WHERE CounterID = '" + IDСчетчика + "' AND ([CounterDateTime] >= '" + Формат(ДатаСарт, "ДФ='yyyy-MM-dd HH:mm:ss.000'") + "' AND [CounterDateTime] <= '" + Формат(ДатаФиниш , "ДФ='yyyy-MM-dd HH:mm:ss.999'")+ "') | ORDER BY CounterDateTime ASC";
Для построения графика достаточно выбрать CounterDateTime и CounterValue.
В итоге получилась обработка следующего вида.
Для удобства помимо графика на форму выведены таблицы результатов запросов.
Настройки подключения к БД видны на закладке «Настройки». В событии"ПриСозданииНаСервере" можно прописать их автозаполнение
Дополнительно:
При контроле сервера каждому требуется свой состав счетчиков. Каждый для себя определяет границы счетчиков, превышение которых не желательно (это могут быть рекомендованные показатели или выбранные для себя эмпирически). Чтобы всё это не держать в голове, было принято решение вести в обработке таблицу соответствия:
1. Имя счётчика (в нижнем регистре)
2. Значение которое будет отчерчено на графике зеленой линией
3. Описание счетчика.
Для примера, в обработке заполнил полностью для рассматриваемого счетчика. Результат видно на основном скрин-шоте:
Стр = ТаблицаЭталонов.Добавить(); Стр.Имя = "pages/sec"; Стр.Значение = 1000; Стр.Описание = "Указывает скорость чтения и записи страниц на диск для разрешения серьезных сбоев страниц. Этот счетчик является основным указателем типов сбоев, которые приводят к задержкам во всей системе. Он показывает количество полученных страниц для компенсации сбоев страниц в кэше файловой системы. Эти страницы обычно требуются приложениями. Значение этого счетчика не должно превышать 1000 в любое время.";
Никаких уникальных технологий не применялось, всё сделано именно на уровне "для чайников", из-за этого кому-то код может показаться "не на уровне". Так что пожелания и конструктивная критика - приветствуются.
Если где-то описал сумбурно и требуется больше пояснений или кода - готов откорректировать.