За время работы с системой QlikView мне стало понятно, что в работе  иногда не хватает некоторой информации, либо не устраивает оперативность получения каких-то данных, либо искать ответ на вопрос оказывается совсем неудобно. К примеру, мне нужно знать, что определенное приложение не перезапустилось, или что свободной оперативной памяти осталось совсем мало, или что процесс NPrinting перестал осуществлять рассылки или куда-то исчезло свободное место на жёстком диске и т.д..

В прошлом и текущем году наш отдел QlikView, в свободное от задач бизнеса время, начал реализовывать инструменты, упрощающие нам жизнь, как для администрирования сервера, так и для разработки. Этими инструментами я с коллегами и хочу поделиться в этом и будущих постах:

  1. Дополнительные оповещения
    1. о пропущенных системой запусках приложений
    2. об ошибках в запуске «важных» приложений.
    3. о работе NPrinting.
    4. о заканчивающейся оперативной памяти в системе.
  2.  Приложение для анализа структуры жесткого диска с уклоном на хранилище QlikView.
  3. Приложение со списком лицензий пользователей.
  4. Приложение, отображающее в удобном виде NTFS права пользователей
  5. Приложение для понимания, где и какие qvd файлы используются.
  6. Инструмент синхронизации хранилища тестового и продуктивного серверов.

Если будут появляться доп. пункты, мы их будем добавлять дальше в список и писать новые статьи.

В этой статье буду освещать первый пункт.

Оповещения о пропущенных системой запусках приложений.

Для начала пару слов о пользе таких оповещений. Иногда получается так, что сервер QlikView пропускает запуск какого-либо экстрактора или приложения.

На примере ниже: у нас есть приложение, которое запускается каждый день после отработки экстрактора, но 19 марта приложение не было запущено:

Оповещения QlikView

Никаких сообщений об ошибке не приходит. Когда мы пытались понять причину этого вопроса (в том числе консультировались со специалистами АТК) мы выяснили, что планировщик QlikView может одновременно перезапускать 9 процессов и что это ограничение Windows, на одном из qRUGDay (декабрь 2014) даже было сообщено, что возможно существует решение этой проблемы.

Наша команда пробовала понять, что происходит, и детально проанализировала логи QlikView. Оказалось, что приложение ставится в очередь, стоит в этой очереди 10 минут и если за это время приложение не ушло из очереди, то оно просто убирается оттуда. В итоге подобный незапуск приложений я уже не связываю только с количеством одновременно обновляемых приложений, так как есть примеры, когда не запускались приложения и в «тихое» время.

У нас есть экстракторы, за которыми по цепочке запускается более 10 экстракторов и конечных приложений. Т.е. если какой-либо из экстракторов в цепочке система пропустит, мы останемся без обновленных приложений и не получим об этом никакой информации, кроме звонка пользователя, что отчёт за сегодня не обновился. А экстрактор может отрабатывать как 5-10 минут, так и несколько часов и в итоге пользователи могут потерять день работы с отчётом, а обновленный отчёт за час до конца рабочего дня ещё никого не радовал!

Просматривать дерево QlikView Management Console для выявления «незапущенных» приложений – также не самое благодарное дело (и неэффективное в том числе). Кроме того,  незапуск может произойти в выходные дни.

В итоге мы придумали и реализовали систему оповещений.

Шаг 1. Скрипт PowerShell

Для начала создаём скрипт PowerShell (пример скрипта Check_SR_reload.ps1)

Смысл в том, что мы сравниваем время последнего изменения log-файла $FileTime приложения $CheckItem c сегодняшним днём $TimeStampForFileDay

$CheckItem = «E:QVServerDocsFix PriceControllingSales Report.qvw.log»

$FileTime = (Get-Item $CheckItem).LastWriteTime.toString(«yyyyMMdd»)

$TimeStampForFileDay = Get-Date -f yyyyMMdd

if($TimeStampForFileDay -ne $FileTime) #Если дата последнего изменения файла не равна сегодняшнему дню, отправляется письмо.

{

—- Отправка сообщения —-

}

Если условие выполняется, то приходят письма.Так, например,  Sales Report за последние две недели пропустил два запуска, причём в выходные дни, и мы получили такие письма:

Оповещения QlikView

Шаг 2. Планировщик Windows

Далее создаём новую задачу на перезапуск на перезапуск в планировщике Windows примерно через 20-30 минут после планируемого запуска приложения в QlikView Management Console.

Для работы с подобными скриптами у нас создана отдельная папка в планировщике CheckStartReload.

Оповещения QlikView

Оповещения QlikView

Если приложение запускается несколько раз в день, то устанавливаем триггер на запуск аналогично QV Management Console плюс 20-30 минут.

Настройка задачи в планировщике Windows:

Вкладка «Общие»:

Все подобные задачи выполняются от имени учётной записи, которая является локальным администратором на компьютере. Задача выполняется вне зависимости от регистрации пользователя.

Оповещения QlikView

Вкладка «Триггеры»:

Настраиваем время и периодичность перезапуска.

Вкладка «Действия»:

Действие «Запуск программы»

Программа или сценарий powershell

Добавить аргумены: “полный путь к файлу .ps1”.

Оповещения QlikView

Важно:

  1. Анализируем именно лог файл, так как он обновляется сразу же после запуска приложения, а само приложение может грузиться несколько часов. Т.е. мы не зависим от длительности перезапуска приложения.
  2. Создание лог файла должно быть включено в настройках документа (Document Settings).Оповещения QlikView
  3. Отправку делаю именно на корпоративную почту, пересылка на личную и др. почту осуществляется уже из Outloook, так как правила можно временно отключить из почтовой программы не трогая скрипт (об этом далее).
  4. При желании проверку запуска всех нужных приложений можно создать в одном скрипте и запускать единовременно, но этот вариант для меня оказался не гибким, хотя коллега из другой компании решил сделать именно так.

Шаг 3. Правила в Microsoft Outlook

Этот пункт выполнять при необходимости – я, например, сделал переадресацию сообщения на личную почту и на почту, которую предоставляют мобильные операторы. Итак, создаём  дополнительное правило в Outlook.

Оповещения QlikView

Корпоративная почта у меня настроена не на всех гаджетах, а вот основная почта на сервисе yandex есть на всех устройствах и на ноутбуке.

Отправка на сотовые номера нужна только для того, чтобы приходили sms (это всё настраивается через личный кабинет сотового оператора, и условия предоставления услуг иногда меняются).

На корпоративную и личную почту сообщения приходят сразу же. Sms часто поступают с задержкой, иногда с довольно большой, а порой и вообще пропадают. Правда зачастую именно благодаря sms я узнаю о той или иной проблеме в работе сервера, поэтому тоже полезно.

Пример эффективного результата работы подобных оповещений:

Приложение запускается каждый день в 8:59 (по плану), но 21го марта запуск был системой пропущен. В 9:20 сработала задача в планировщике windows, и я получил сообщение. В данном случае я увидел уведомление на планшете с личной почты, находясь дома. Зайдя по VPN на сервер я запустил вручную приложение (на это потребовалось 2-3 минуты).

Таким образом, стандартный сценарий отклонился всего на 25 минут.

Оповещения QlikView

Оповещения о пропущенных системой запусках приложений.

Здесь речь пойдёт об оповещениях QlikView Management Console.

Оповещения QlikView

Если при выполнении задачи на обновление приложения возникает ошибка, то приходит письмо подобного содержания:

Оповещения QlikView

Но иногда просто сообщения на корпоративную почту недостаточно и узнавать о некоторых ошибках нужно как можно раньше.

В данном случае я использую возможности Microsoft Outlook, где создаю правило по аналогии с описанием выше, добавляя переадресацию на личную почту и, при необходимости,  sms через почту мобильного оператора. На каждое приложение можно сделать свои настройки.

Оповещения о работе NPrinting

NPrinting иногда позволяет себе не работать и перестаёт рассылать сообщения. Это происходит по разным причинам, либо подвис какой-либо процесс QV.exe, либо зависла служба, либо слетели настройки пользователя, от которого запускается NPrinting, и задача зависла на запросе выбора языка или вопросе безопасности макроса.

За несколько лет использования NPrinting создаются довольно важные пользователям рассылки, и если служба не работает, мы спустя какое-то время получаем сообщения от пользователей, что рассылки нет.

Наша же цель – узнавать о проблеме максимально быстро, ну или хотя бы до того, как о ней узнает пользователь.

Исследования показали, что лог действий сервиса NPrinting хранится в папке C:\Users\Public\Documents\NPrinting\Log\ в файле YYYYMMDD_NPrintingSvc.log

Соответственно, нам осталось настроить проверку данного файла (по аналогии с логом отдельных приложений). Так как задачи с оповещениями запускается в основном в первой половине дня, а также по отдельным запросам, мы создали пустую задачу, которая запускается каждый час. Таким образом наш лог файл обновляется минимум один раз в час.

В результате мы сравниваем текущее время $TimeStampNow и время обновления $FileTime  лога $Path (скрипт PowerShell Check_NPrinting.ps1).

$TimeStampNow = (Get-Date).AddHours(-3).toString(«yyyyMMddHHmm»)

$TimeStampLog = Get-Date -f yyyyMMdd

$FileTime = (Get-Item $Path).LastWriteTime.toString(«yyyyMMddHHmm»)

$Path = «C:\Users\Public\Documents\NPrinting\Log\» + $TimeStampLog + «_NPrintingSvc.log»

Настройка планировщика и Outlook аналогично первому пункту статьи, у нас задача отрабатывает ежечасно.

Оповещения о ресурсах компьютера

Оперативная память

Всем известна проблема, когда заканчивается оперативная память на сервере, и хорошо было бы узнать об этом как можно быстрее. Причин обычно не так много, и, пожалуй, самые частые это:

  • пользовательский кэш (процесс QVS.exe занимает много места)
  • кто-то из разработчиков запустил неудачную версию приложения

Ждать когда пользователи начнут звонить и говорить, что у них всё зависает и ничего не открывается – не наш случай. Поэтому и здесь мы тоже сделали простенький скрипт PowerShell, который отвечает за оповещение по свободному объему RAM.

Процент свободной оперативной памяти узнаётся следующей командой (скрипт ReportMemory.ps1):

$Memleftpercent = ((Get-WmiObject Win32_OperatingSystem).FreeVirtualMemory / (Get-WmiObject Win32_OperatingSystem).TotalVirtualMemorySize) * 100

Далее, если памяти меньше, чем 15%, отправляется письмо.

Настройка планировщика и Outlook аналогично первому пункту статьи, у нас задача в планировщике Windows запускается каждые 5 минут.

За время работы скрипта мы обнаружили, что иногда в самом начале дня оперативная память уже заканчивается, когда даже активные пользователи не начали работы, и  процесс QVS.exe при этом весит внушительные 400Gb. Мы предположили, что это остатки активности пользователей вчерашнего дня и написали ещё один скрипт (скрипт Kill_QVS.ps1)

Сам скрипт состоит из одной строки.

Stop-Process -Name «QVS»

Запускается у нас каждый день в 23:30. Сообщения о нехватке памяти стали появляться гораздо реже.

Доступность служб QlikView

Все оповещения выше будут отрабатывать только в том случае, если сам сервер QlikView работает и находится в сети. Но ведь может быть и так, что сам сервер ушёл на перезагрузку по неведомой нам причине или просто завис или не пингуется. В данном случае ни у пользователей ничего не будет работать, ни рассылки не будут приходить, а ,возможно, и не будут обновляться данные.

В данном случае можно сделать проверку ресурсов сервера QlikView с другого сервера в сети.  У нас установлен ресурс Zabbix, на котором мы с помощью админов как-то настроили оповещения:

Оповещения QlikView

В данном случае устанавливались обновления Windows (кстати, эти обновления рекомендую поставить на расписание раз в неделю в субботу, а то несколько раз были внеплановые перезагрузки как раз из-за обновлений Windows).

Настройка – аналогично первому пункту статьи.

Резюме:

В итоге мы с коллегами стали получать нужные и актуальные оповещения на корпоративную почту, а для особо важных оповещений настроили переадресацию на личную почту и sms сообщения.

Информацию получаем в нужное время в нужном месте, при наличии VPN доступа можно запустить нужную задачу или оперативно отреагировать на полученное сообщения хоть дома с ноутбука, хоть на улице или в метро или вообще где угодно с планшета/смартфона при наличии мобильного интернета или wi-fi.

Жизнь стала намного проще. Можно сказать, появилась уверенность в завтрашнем дне!

За ценные идеи и участие в создании материалов этой статьи благодарю Мотовилова Степана и Суслова Станислава.

В следующей статье я планирую рассказать о приложении для анализа структуры жесткого диска, которое отвечает на многие вопросы, связанные с хранилищем, например,

  • куда делось место, ведь вчера было на 100 GB больше?
  • какая папка занимает больше всего памяти?
  • с какой скоростью растёт количество данных на сервере?
  • чтобы такого ненужного удалить?
  • и т.д.