Идея такая: Запускаешь и смотришь. ВСЁ! Смотришь своими глазами. Не глазами PRTG, ZABBIX и прочих систем, они тоже присутствуют и молодцы, но не о них сейчас... И хорошо, когда наблюдение ведешь на отдельном экране. И совсем идеально, когда на отдельном компе (с отдельным же экраном!). Можно так же выводить на общий монитор или телевизор в кабинетах групп поддержки, разработки, дежурных смен и т.д. И бывает что судорожно-срочно нужно ответить руководству "что там у нас происходит на серверах"? Да, на всех и сразу. Чтобы иметь мгновенное представление, пускай в первом приближении, обзавелся таким скриптом.
В скрипте присутствует интерактивное меню, помогающее выбрать параметры мониторинга. Есть параметры, которые задаются только аргументами командной строки:
-Refresh <n>: Период запуска обновления, в секундах. Указывается в диапазоне от 3 до 600. Период обновления иначе. НО следует понимать, что опрос серверов выполняется последовательно, и в случае, когда вы собираетесь наблюдать за большим количеством инстанций, то реальный период обновления будет складываться из всех времён, затраченных на опрос этих инстанций. Например: наблюдаем 10 инстанций, и на опрос каждой тратится около 0,5 сек, тогда реальный период опроса будет ~8 секунд (при параметре -Refresh 3). Совет: при большом количестве инстанций устанавливайте меньшие значения этого параметра. По умолчанию период равен 15 секундам.
SQL_Monitor.ps1 -Refresh 3
-Select: Включает режим выбора площадок. Эммм. У нас в организации несколько площадок. Разные назначения, платформы, масштабы, охваты и тд,.. Каждая площадка имеет свой шифр/код, и это обычно 3 символа. В каждой площадке есть Продуктив и "всё остальное", т.е. разработка и тестирование. У нас площадки: FHD (бухгалтерия), ENB (биллинг), NVD (торговля), LK (личный кабинет) и т.д. По-хорошему, следовало бы разделить мониторинг по этому признаку "продуктив-или-тест", но пока без него. Нам и так хорошо). Итак, если данный параметр указан при запуске, то меню выбора площадки для мониторинга станет множественным. С ним можно одновременно выбрать более одной площадки. Без указания этого параметра - мониторим одну площадку или сразу все (в меню появляется пункт "ALL").
SQL_Monitor.ps1 -Select
Сразу после запуска скрипта появляются несколько меню (друг за другом):
вот как выглядит меню без параметра select:
а вот как с параметром select:
Далее следует выбрать продолжительность мониторинга в минутах, 4 варианта: "Бесконечно, 10, 30, 60"
Кстати, отдельный скрипт для таких менюшек я выкладывал, в данной публикации он обновлен и встроен в _CommonFunctions.min.ps1. В этом файле много чего собрано, пользуйтесь на здоровье ;-)
Конечно, все предлагаемые на выбор параметры прописаны в скрипте, в виде обыкновенных списков или массивов значений. Можете отредактировать своими преференциями! ;Ъ
Естественно, необходимо настроить под свой ландшафт переменные, они определены в коде.
$global:_txt_land = ("FHD","ENB","NVD","RDS","LK","KC","IRK") - список площадок
$_arr_sql_instances - массив SQL-инстанций,
где Первая колонка - это DNS-имя хоста и/или инстанса, (именно инстанса, т.е. можно указывать имя_хоста\имя_инстанса), но в большинстве случаев достаточно DNS имени СУБД хоста. Вторая колонка - это имя площадки, к которой принадлежит инстанс, заполняется значениями из $global:_txt_land. Или наоборот, значения в списке _txt_land должны коррелировать со значениями второй колонке массива инстансов, ну вы поняли. Третья колонка - это тип инстанса: продуктив или тест, пока не влияет ни на что - задел на будущее.
Ниже скриншот, на котором выполняется бесконечный мониторинг, площадки "ENB", с интервалом в 15 секунд.
в "шапке" 1 - выбранная площадка; 2 - когда запущен, когда будет остановлен, интервал обновления; 3- легенда, по которой осуществляется раскраска строк. Сортировка строк выполнена по полю продолжительность, по убыванию. 4 - список инстанций, с временами работы запроса по каждой. Имеет свою "раскраску" по времени ответа, попробуйте разгадать)
5 - Главное, ради чего запускается скрипт. Текущие запросы на СУБД в момент его опроса, то чем занят СКУЛЬ.
Колонки тут следующие:
Progress % - Процент (прогресс) выполнения запроса. MSSQL выдаёт такую информацию по некоторым командам (архивирование, восстановление, команды DBCC и т.д.), остальные остаются чёрными, у них процент всегда пустой.
[X] - пока не функционально, для будущих версий.
Instance - Имя инстанса. Кривая стрелочка означает, что инстанс тот же, просто помогает визуально разделить инстансы с похожими именами...
spID - идентификатор процесса выполняемого запроса.
Blckr - блокирующий spID, он мешает текущему запросу выполниться.
User - имя пользователя, выполняющего запрос.
DB name - база данных, в контексте которой выполняется запрос.
Command - команда, тип, статус. всё через "или".
Duration - длительность этого запроса. ЧЧ:ММ:СС.мс, после 24 часов - сбрасывается на ноль.
~Estimated end - ожидаемое (прогнозируемое) время завершения запроса. как и Progress %, заполняется не для всех запросов. хоть и очень полезное.
Query (trimmed) - несколько первых букв текста запроса/команды/батча/скрипта/...называйте_как_хотите... и (trimmed) - говорит что запрос "подстрижен".
Имейте в виду, что все поля, содержащие строки чрезмерной длины будут подрезаны до определенных значений. это сделано чтобы такие строки не "сбивали строй" у таблицы. На скриншоте: вторая строка снизу, значение поля "User" подрезано и добавлен знак "~".
Скрипт поочередно выполняет опрос выбранных СУБД с помощью PS командлета "Invoke-SQLcmd", поэтому нужно убедиться в наличии "SqlServer" среди установленных модулей (команда "Get-Module"). В случае отсутствия, установить его можно с помощью команды "Install-Module -Name SqlServer".
Подключение к инстанциям SQL происходит со встроенной авторизацией Windows, поэтому, не забывайте наделять необходимыми ролями и предоставлять права той учетной записи, под которой выполняется запуск скрипта.
Совет: в настройках окна PowerShell используйте точечный шрифт 5х12, иначе окно может не поместиться в монитор.
В архиве три файла, общие функции, скрипт для псевдографики, и сам запускающий мониторинг скрипт. Прошу!
Обоснованная критика приветствуется.
... всех С Наступающим 2020!
Обновление:
добавлен интерфейсный параметр запуска -lang, имеет два значения "en" (по-умолчанию) и "ru".