За время работы с системой QlikView мне стало понятно, что в работе иногда не хватает некоторой информации, либо не устраивает оперативность получения каких-то данных, либо искать ответ на вопрос оказывается совсем неудобно. К примеру, мне нужно знать, что определенное приложение не перезапустилось, или что свободной оперативной памяти осталось совсем мало, или что процесс NPrinting перестал осуществлять рассылки или куда-то исчезло свободное место на жёстком диске и т.д..
В прошлом и текущем году наш отдел QlikView, в свободное от задач бизнеса время, начал реализовывать инструменты, упрощающие нам жизнь, как для администрирования сервера, так и для разработки. Этими инструментами я с коллегами и хочу поделиться в этом и будущих постах:
- Дополнительные оповещения
- о пропущенных системой запусках приложений
- об ошибках в запуске «важных» приложений.
- о работе NPrinting.
- о заканчивающейся оперативной памяти в системе.
- Приложение для анализа структуры жесткого диска с уклоном на хранилище QlikView.
- Приложение со списком лицензий пользователей.
- Приложение, отображающее в удобном виде NTFS права пользователей
- Приложение для понимания, где и какие qvd файлы используются.
- Инструмент синхронизации хранилища тестового и продуктивного серверов.
Если будут появляться доп. пункты, мы их будем добавлять дальше в список и писать новые статьи.
В этой статье буду освещать первый пункт.
Оповещения о пропущенных системой запусках приложений.
Для начала пару слов о пользе таких оповещений. Иногда получается так, что сервер QlikView пропускает запуск какого-либо экстрактора или приложения.
На примере ниже: у нас есть приложение, которое запускается каждый день после отработки экстрактора, но 19 марта приложение не было запущено:
Никаких сообщений об ошибке не приходит. Когда мы пытались понять причину этого вопроса (в том числе консультировались со специалистами АТК) мы выяснили, что планировщик 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 за последние две недели пропустил два запуска, причём в выходные дни, и мы получили такие письма:
Шаг 2. Планировщик Windows
Далее создаём новую задачу на перезапуск на перезапуск в планировщике Windows примерно через 20-30 минут после планируемого запуска приложения в QlikView Management Console.
Для работы с подобными скриптами у нас создана отдельная папка в планировщике CheckStartReload.
Если приложение запускается несколько раз в день, то устанавливаем триггер на запуск аналогично QV Management Console плюс 20-30 минут.
Настройка задачи в планировщике Windows:
Вкладка «Общие»:
Все подобные задачи выполняются от имени учётной записи, которая является локальным администратором на компьютере. Задача выполняется вне зависимости от регистрации пользователя.
Вкладка «Триггеры»:
Настраиваем время и периодичность перезапуска.
Вкладка «Действия»:
Действие «Запуск программы»
Программа или сценарий powershell
Добавить аргумены: “полный путь к файлу .ps1”.
Важно:
- Анализируем именно лог файл, так как он обновляется сразу же после запуска приложения, а само приложение может грузиться несколько часов. Т.е. мы не зависим от длительности перезапуска приложения.
- Создание лог файла должно быть включено в настройках документа (Document Settings).
- Отправку делаю именно на корпоративную почту, пересылка на личную и др. почту осуществляется уже из Outloook, так как правила можно временно отключить из почтовой программы не трогая скрипт (об этом далее).
- При желании проверку запуска всех нужных приложений можно создать в одном скрипте и запускать единовременно, но этот вариант для меня оказался не гибким, хотя коллега из другой компании решил сделать именно так.
Шаг 3. Правила в Microsoft Outlook
Этот пункт выполнять при необходимости – я, например, сделал переадресацию сообщения на личную почту и на почту, которую предоставляют мобильные операторы. Итак, создаём дополнительное правило в Outlook.
Корпоративная почта у меня настроена не на всех гаджетах, а вот основная почта на сервисе yandex есть на всех устройствах и на ноутбуке.
Отправка на сотовые номера нужна только для того, чтобы приходили sms (это всё настраивается через личный кабинет сотового оператора, и условия предоставления услуг иногда меняются).
На корпоративную и личную почту сообщения приходят сразу же. Sms часто поступают с задержкой, иногда с довольно большой, а порой и вообще пропадают. Правда зачастую именно благодаря sms я узнаю о той или иной проблеме в работе сервера, поэтому тоже полезно.
Пример эффективного результата работы подобных оповещений:
Приложение запускается каждый день в 8:59 (по плану), но 21го марта запуск был системой пропущен. В 9:20 сработала задача в планировщике windows, и я получил сообщение. В данном случае я увидел уведомление на планшете с личной почты, находясь дома. Зайдя по VPN на сервер я запустил вручную приложение (на это потребовалось 2-3 минуты).
Таким образом, стандартный сценарий отклонился всего на 25 минут.
Оповещения о пропущенных системой запусках приложений.
Здесь речь пойдёт об оповещениях QlikView Management Console.
Если при выполнении задачи на обновление приложения возникает ошибка, то приходит письмо подобного содержания:
Но иногда просто сообщения на корпоративную почту недостаточно и узнавать о некоторых ошибках нужно как можно раньше.
В данном случае я использую возможности 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, на котором мы с помощью админов как-то настроили оповещения:
В данном случае устанавливались обновления Windows (кстати, эти обновления рекомендую поставить на расписание раз в неделю в субботу, а то несколько раз были внеплановые перезагрузки как раз из-за обновлений Windows).
Настройка – аналогично первому пункту статьи.
Резюме:
В итоге мы с коллегами стали получать нужные и актуальные оповещения на корпоративную почту, а для особо важных оповещений настроили переадресацию на личную почту и sms сообщения.
Информацию получаем в нужное время в нужном месте, при наличии VPN доступа можно запустить нужную задачу или оперативно отреагировать на полученное сообщения хоть дома с ноутбука, хоть на улице или в метро или вообще где угодно с планшета/смартфона при наличии мобильного интернета или wi-fi.
Жизнь стала намного проще. Можно сказать, появилась уверенность в завтрашнем дне!
За ценные идеи и участие в создании материалов этой статьи благодарю Мотовилова Степана и Суслова Станислава.
В следующей статье я планирую рассказать о приложении для анализа структуры жесткого диска, которое отвечает на многие вопросы, связанные с хранилищем, например,
- куда делось место, ведь вчера было на 100 GB больше?
- какая папка занимает больше всего памяти?
- с какой скоростью растёт количество данных на сервере?
- чтобы такого ненужного удалить?
- и т.д.
Свежие комментарии